NSU-1191-Compound Words

来源:互联网 发布:淘宝店升级规则 编辑:程序博客网 时间:2024/05/18 14:28

这个题大意就是说给你一系列单词,所给单词已经按照字典序排好。要求输出单词能由所给单词中2个单词拼成的单词,即对该单词分割为2部分,这2部分都作为独立的单词存在于所给的单词中。

用二分查找即可以过~

代码:

#include<cstdio>#include<cstring>#include<iostream>#define MAX 120001using namespace std;char word[MAX][100];bool HalfSearch(char *str,int n){    int left=0,right=n-1;    while(left<=right)    {int mid=(left+right)>>1;if(!strcmp(str,word[mid]))    return true;if(strcmp(str,word[mid])<0)    right=mid-1;else    left=mid+1;    }    return false;}int main(){    int n=0;    while(scanf("%s",word[n++])!=EOF);    for(int i=0;i<n;i++)    {int len=strlen(word[i]);char strl[100],*strr;for(int j=0,k=0;j<len-1;j++){    strl[k++]=word[i][j];    strl[k]='\0';    strr=word[i]+j+1;    if(HalfSearch(strl,n)&&HalfSearch(strr,n))    {printf("%s\n",word[i]);break;    }}    }    return 0;}