紫书第五章习题 5-5 UVa 10391 - Compound Words

出处:https://blog.csdn.net/czjxy881/article/details/8300237

题目链接:https://vjudge.net/contest/231030#problem/E

  判断一个单词是不是组合词,题目中说是不同的单词,但是如果加不同判断就会WA……所以直接无视就好了

 

     一共最多有120000的单词,这种题有两个思路,1是合成词,2是拆分词。

 

     合成词的复杂度是n^2果断超时

     拆分词是n*m(m为平均长度),因为m未知,所以抱着试一试的想法,用map水了一下,就过了,120ms,可见m的长度并不大


/* 
author:jxy 
lang:C/C++ 
university:China,Xidian University 
**If you need to reprint,please indicate the source** 
*/  
#include <iostream>  
#include <cstdio>  
#include <cstdlib>  
#include <string>  
#include <map>  
#define INF 1E9  
using namespace std;  
map<string,bool> hash;  
string s[150000];  
int main()  
{  
    int i,j;  
    int cnt=0;  
    hash.clear();  
    while(cin>>s[cnt])  
    {  
        hash[s[cnt]]=1;  
        cnt++;  
    }  
    string a,b;  
    for(i=0;i<cnt;i++)  
     for(j=0;j<s[i].size()-1;j++)  
     {  
        a=s[i].substr(0,j+1);  
        if(!hash[a])continue;  
        b=s[i].substr(j+1);  
        if(!hash[b])continue;  
        cout<<s[i]<<endl;  
        break;  
     }  
     return 0;  
}  

猜你喜欢

转载自blog.csdn.net/JXUFE_ACMer/article/details/80454390