uva 10391

 

 这个题,单纯做出来有很多种方法,但是时间限制3000ms,因此被TL了不知道多少次,关键还是找对最优解决方法,代码附上;

#include<bits/stdc++.h>
using namespace std;
map<string,int>MAP;
char s[120005][30];

int main(){
    MAP.clear();
   int n = 0;
   while(cin>>s[n]){

    MAP[s[n]]=1;
    n++;
   }
    for(int i=0;i<n;i++){
        int l=strlen(s[i]);

        for(int j= 0;j<l;j++){
        char temp1[30] = {'\0'};
        char temp2[30] = {'\0'};
            strncpy(temp1,s[i],j);
            strncpy(temp2,s[i]+j,l-j);
            if(MAP[temp1]&&MAP[temp2])
                {cout<<s[i]<<endl;
                break;}
        }

    }
return 0;


}

 

posted on 2017-06-28 23:58  徐义宝  阅读(205)  评论(1编辑  收藏  举报

导航