zoukankan      html  css  js  c++  java
  • UVA-10391 Compoud Words

    You are to find all the two-word compound words in a dictionary. A two-word compound word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary. Input Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 120,000 words. Output Your output should contain all the compound words, one per line, in alphabetical order. Sample Input a alien born less lien never nevertheless new newborn the zebra Sample Output alien newborn

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    #include<string>
    using namespace std;
    const int maxn=2e5;
    int a[maxn], t = -1, sum = 0;
    char s[maxn][30], ch1[30], ch2[30];
    
    int Hash(char *str)
    {
    	int seed = 31, hash = 0;
    	while (*str)
    		hash = hash * seed + *str++;
    	return hash & 0x7FFFFFFF;
    }
    int Find(int key, int l, int r)
    {
    	int mid = (l + r) / 2;
    	if(l>r) return 0;
    	if(a[mid]==key) return 1;
    	else if(a[mid]>key) Find(key, l, mid - 1);
    	else  Find(key, mid + 1, r);
    }
    int main()
    {
    	int i, j, k, l;
    	while(gets(s[++t])) a[t] = Hash(s[t]);
    	sort(a, a + t);
    	for (i = 0; i<t; i++)
    	{
    		l = strlen(s[i]);
    		for (j = 0; j<l - 1; j++)
    		{
    			for (k = 0; k <= j; k++)
    				ch1[k] = s[i][k];
    			ch1[j + 1] = '';
    			for (k = j + 1; k<l; k++)
    				ch2[k - j - 1] = s[i][k];
    			ch2[l - j - 1] = '';
    			if (Find(Hash(ch1), 0, t - 1) + Find(Hash(ch2), 0, t - 1) == 2) 
    			{
    				printf("%s
    ",s[i]);
    				break; 
    			}
    		}
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    Unity内生成深度贴图
    曲线细分
    Hermite插值
    查看静态库支持的CPU架构
    NLua引擎
    ImWindow
    Xenko Engine
    Fast Shadow Receiver
    2D色彩变换
    RVO
  • 原文地址:https://www.cnblogs.com/csushl/p/9386502.html
Copyright © 2011-2022 走看看