HDU 2072 单词数
2016-01-24 21:12
281 查看
字典树。
这题真的有点坑。
1,输出为0的情况。
2,第一个单词前面有空格
3,单词间的空格不止一个
4,最后的单词后面的空格
这题真的有点坑。
1,输出为0的情况。
2,第一个单词前面有空格
3,单词间的空格不止一个
4,最后的单词后面的空格
#include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> #include<math.h> #include<queue> using namespace std; #define nn 1001000 char s[nn]; struct Trie { int ch[nn][26]; int val[nn]; int sz; void init() { sz=1; memset(ch[0],0,sizeof(ch[0])); } int idx(char c) {return c-'a';} void insert(char *s,int v) { int u=0,n=strlen(s); for(int i=0;i<n;i++) { int c=idx(s[i]); if(!ch[u][c]) { memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0; ch[u][c]=sz++; } u=ch[u][c]; } val[u]=v; } int find(char *s) { int u,n=strlen(s); for(int i=0;i<n;i++) { int c=idx(s[i]); if(!ch[u][c]) return 0; u=ch[u][c]; } return val[u]; } }t; int main() { char str[100]; while(gets(s) && s[0]!='#') { int j=0,ans=0; t.init(); int n=strlen(s); for(int i=0;i<n;) { while(s[i]==' ') i++; int j=0; while(s[i]!=' '&& i<n) { str[j++]=s[i++]; } while(s[i]==' ') i++; str[j]='\0'; if(strlen(str)==0) break; if(!t.find(str)) { t.insert(str,1); ans++; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- Eclipse不能自动编译 java文件的解决方案
- 【转】关于架构师和架构设计的一些常见误解(2)
- DateFinition
- 两个事物 update同一张表出现的死锁问题
- 判断语句
- 欢迎使用CSDN-markdown编辑器
- WHY WE SHOULD BUILD SOFTWARE LIKE WE BUILD HOUSES
- Spark学习笔记3-Scala函数式编程
- A Large-Scale Car Dataset for Fine-Grained Categorization and Verification论文笔记
- JavaSE入门学习9:Java基础语法之数组
- 【CMD】findstr命令
- maven命令大全
- Access数据库中日期时间类型的时间段查询
- javascript深入理解js闭包
- IDEA+maven搭建web框架
- 如何编译生成dll
- eclipse使用快捷键
- 【Android】 Sqlite3 not found
- 对IDisposable接口的理解
- 开发者日志(2016年01月24日20:41:45):关于android AsyncTask学习