UVA-10391 Compoud Words
2024-10-06 16:17:36
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] = '\0';
for (k = j + 1; k<l; k++)
ch2[k - j - 1] = s[i][k];
ch2[l - j - 1] = '\0';
if (Find(Hash(ch1), 0, t - 1) + Find(Hash(ch2), 0, t - 1) == 2)
{
printf("%s\n",s[i]);
break;
}
}
}
return 0;
}
最新文章
- AlertDialog的六种创建方式
- 控制移动端页面的缩放(meta)
- linux在home目录下使用ls命令卡死
- 在Android工程中运行main函数
- JS表单设置值
- apache rewrite设置 禁止某个文件夹执行php文件
- 简单模仿javascript confirm方法的例子
- PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决
- poj2823Sliding Window(线段树求最值)
- 阻止JS事件冒泡传递(cancelBubble 、stopPropagation)
- JavaScriptCore全面解析 (下篇)
- Node.js进阶:5分钟入门非对称加密方法
- AX2012 ERP “系统慢”调优---跟踪SQL执行,优化代码
- android6.0 Activity(四) Surface创建
- centos在图形界面和命令行之间切换的快捷键是什么?
- js版RSA算法
- verilog语法学习目录
- 【Linux】好玩的linux命令
- 使用deque模块固定队列长度,用headq模块来查找最大或最小的N个元素以及实现一个优先级排序的队列
- Linux工作管理