博客
关于我
Hat’s Words(字典树)
阅读量:620 次
发布时间:2019-03-13

本文共 2202 字,大约阅读时间需要 7 分钟。

Hat’s Words

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 11314    Accepted Submission(s): 4041

Problem Description
A hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.
You are to find all the hat’s words in a dictionary.
 

 

Input
Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 50,000 words.
Only one case.
 

 

Output
Your output should contain all the hat’s words, one per line, in alphabetical order.
 

 

Sample Input
aahathathatwordhzieeword
 

 

Sample Output
ahathatword
 
题解:判断单词是否是由两个单词合并得到,加了个val判断是否为一个完整的单词;本来还以为是只与hat结合呐,神经的只减去hat,谁知道,自己想错了。。。是两个单词的结合;
代码:
1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define mem(x,y) memset(x,y,sizeof(x)) 8 const int INF=0x3f3f3f3f; 9 const double PI=acos(-1.0);10 const int MAXN=50010;11 int ch[MAXN][30],word[MAXN],val[MAXN];12 char dt[50010][110];13 int sz;14 void initial(){15 sz=1;16 mem(ch[0],0);mem(word,0);mem(val,0);17 }18 void join(char *s){19 int len=strlen(s),k=0,j;20 for(int i=0;i

 

#include
#include
#include
#include
#include
using namespace std;typedef long long LL;#define mem(x,y) memset(x,y,sizeof(x))#define SI(x) scanf("%d",&x)#define PI(x) printf("%d",x)#define P_ printf(" ")const int INF=0x3f3f3f3f;const int MAXN=1000010;//要开的足够大 int ch[MAXN][30];int word[MAXN];char str[50010][110];int val[MAXN]; int sz;int N;char l[110],r[110];void insert(char *s){ int k=0,j; for(int i=0;s[i];i++){ j=s[i]-'a'; if(!ch[k][j]){ mem(ch[sz],0); ch[k][j]=sz++; } k=ch[k][j]; word[k]++; } val[k]=1;}bool find(char *s){ int k=0,j; for(int i=0;s[i];i++){ j=s[i]-'a'; k=ch[k][j]; if(!word[k])return false; } if(val[k]!=1)return false; return true;}int main(){ int tp=0; sz=1; mem(ch[0],0);mem(val,0);mem(word,0); while(~scanf("%s",str[tp]))insert(str[tp++]);// printf("%d\n",tp); for(int i=0;i

  

转载地址:http://aueaz.baihongyu.com/

你可能感兴趣的文章
Mysql流程控制结构,if函数、case结构、if结构、循环结构
查看>>
mysql添加外网访问权限
查看>>
mysql添加用户
查看>>
MySQL添加用户、删除用户与授权
查看>>
mysql添加用户及权限
查看>>
Mysql添加用户并授予只能查询权限
查看>>
mysql添加用户权限报1064 - You have an error in your SQL syntax问题解决
查看>>
mysql添加索引
查看>>
mysql添加表注释、字段注释、查看与修改注释
查看>>
mysql清理undo线程_MySQL后台线程的清理工作
查看>>
mysql清空带外键的表
查看>>
MySQL清空表数据
查看>>
mysql源码安装
查看>>
Mysql源码安装过程中可能碰到的问题
查看>>
MySQL灵魂16问,你能撑到第几问?
查看>>
MySQL灵魂拷问:36题带你面试通关
查看>>
mysql状态分析之show global status
查看>>
mysql状态查看 QPS/TPS/缓存命中率查看
查看>>
mysql生成树形数据_mysql 实现树形的遍历
查看>>
mysql用于检索的关键字_Mysql全文搜索match...against的用法
查看>>