joj 1946 compound words

joj 1946 compound words
Sample Input
a
alien
born
less
lien
never
nevertheless
new
newborn
the
zebra

Sample Output

alien
newborn
输入是字典序的,题意就是讲一个单词分成两半,且两半都出现在输入中,则将此单词输出。下面的代码是对每一个单词尝试所有的分拆方法,一个个去寻找是否拆成的两
个是否都存在,如果两个字串都存在,则输出,同时跳出循环(否则可能重复输出)。
其实有更高效的方法,就是到每个单词前面寻找是否有他的字串(比如newborn 前面有new,neverthelsess 前面有never),有的话,再找后半部分是否在输入中。
----
获取子串的方法。 string   B   =   A.substr(start,length);   
  start为子串在A中的开始位置.  
  length为子串的长度
例子   
  void   main()  
  {  
          string   st="ifn",b;  
  b=st.substr(0,2);  
  cout<<b;  
  }  
  结果   if
----

  
  
  
  
点此代码
#include<iostream>
#include
<cstdlib>
using namespace std;
string  a[120000];
  
bool bsearch(string s,int n)
  {
    
int begin=0;
    
int end=n-1;
    
int mid;
        
while(begin<=end)
        {
            mid
=(begin+end)/2;;
            
if(a[mid]==s)
            
return true;
            
if(a[mid]>s)
            {
                end
=mid-1;
            }
            
else
            {
                begin
=mid+1;
            }
            
        }
        
return false;
  }
  
  
int main()
  {
   
string b;
  
int i=0,j,k;
  
while(cin>>b)
  {
    a[i]
=b;
    i
++;
  }
  
for(j=1;j<i;j++)
  {
                        
for(k=1;k<a[j].size();k++)      
              {     
                
string tem(a[j],0,k);
                
string temp(a[j],k,a[j].size());
                
if(bsearch(temp,i)&&bsearch(tem,i))
                {
                    cout
<<a[j]<<endl;
                    
break;
                }
        
               } 
  }
  
  
//system("PAUSE");
  return   0;
  }

你可能感兴趣的:(joj 1946 compound words)