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;
    }
    
    
  • 相关阅读:
    Ubuntu16.04上安装搜狗输入法
    RAM的分类
    解耦技巧——依赖注入!
    傻瓜式学Python3——列表
    Java Builder 模式,你搞懂了么?
    String 源码浅析(一)
    线上CPU100%?看看这篇是怎么排查的!
    生物医学工程SCI期刊投稿(转)
    免费下载文献
    泰山攻略
  • 原文地址:https://www.cnblogs.com/csushl/p/9386502.html
Copyright © 2011-2022 走看看