题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=91209#problem/C
题意: 有一堆按照字典序排好的字符串,问你有多少字符串是由其它两个字符串组成。
法一:STL set
#include <iostream> #include <set> #include <cstdio> #include <string> using namespace std; set <string> mys; int main(){ string st; set <string>::iterator it; while(cin>>st) mys.insert(st); //插入mys for(it=mys.begin();it!=mys.end();it++){ st=*it; for(int i=0;i<st.length()-1;i++){ string sub1=st.substr(0,i+1); string sub2=st.substr(i+1,st.length()-(i+1)); //http://www.w3school.com.cn/php/func_string_substr.asp if( mys.find(sub1)!=mys.end() && mys.find(sub2 )!=mys.end() ){ printf("%s ",st.c_str()); break; } } } return 0; }
法二:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; char ss[120010][50]; int bj(char *s,int n) { int l=0,r=n-1,mid,x; while (l<=r) { mid=(l+r)/2; x=strcmp(s,ss[mid]); if(x==0) return 1; if(x<0) r=mid-1; else l=mid+1; } return 0; } int main() { char s1[100],*s2; int n,j,i,len,k; i=0; while(~scanf("%s", ss[i])) i++; n=i; for(i=0;i<n;i++) { len=strlen(ss[i]); for( j=0,k=0;j<len-1;j++) { s1[k++]=ss[i][j]; s1[k]='