10391compound words
1) 이분법, 다른 사람 AC 코드 로 전환:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
const int Max=120010;
char word[Max][100];
int search(char *str,int n)
{
int left=0,right=n-1;
while(left<=right)
{
int mid=(left+right)>>1;
if(!strcmp(str,word[mid]))
return 1;
if(strcmp(str,word[mid])<0)
right=mid-1;
else
left=mid+1;
}
return 0;
}
int main()
{
int n=0;
while(scanf("%s",word[n++])!=EOF);
for(int i=0; i<n; i++)
{
int len=strlen(word[i]);
char str[100],*str1;
for(int j=0,k=0; j<len-1; j++)
{
str[k++]=word[i][j];
str[k]='\0';
str1=word[i]+j+1;
if(search(str,n)&&search(str1,n))
{
printf("%s
",word[i]);
break;
}
}
}
return 0;
}
2) map 는 쉽게 넘 어 갑 니 다. map / set 등 용기 안의 데이터 구 조 는 빨간색 과 검은색 트 리 를 사용 하기 때문에 찾 는 실현 방법 은 이분법 이기 때문에 STL 코드 를 직접 사용 하 는 것 이 더욱 간결 합 니 다.
#include <bits/stdc++.h>
using namespace std;
map <string,int> hasn;
const int maxn=100010;
int main()
{
hasn.clear();
string a[maxn],b,c;
int g=0;
while(cin>>a[g]){
hasn[a[g]]=1;
g++;
}
for(int i=0;i<g;i++){
for(int j=0;j<a[i].size()-1;j++){
b="";
b=a[i].substr(0,j+1);
if(!hasn[b]) continue;
c="";
c=a[i].substr(j+1);
if(!hasn[c]) continue;
cout<<a[i]<<endl;
break;
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.