hdu 2846 统计给定字符串是多少字符串的子串
2015-09-15 21:42
453 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2846
给定一些字符串,约10000个,给定q的询问,每次询问有一个字符串,判断这个字符串是多少字符串的子串。
字典树处理,把给定字符串的每个后缀都插入字典树,要注意不要把相同的子串重复计数了,因此设置一个id标记,判断之前一个计数是不是当前字符串计数的。
另外字典树的数组要设置的大一些,,,不然会TLE。
给定一些字符串,约10000个,给定q的询问,每次询问有一个字符串,判断这个字符串是多少字符串的子串。
字典树处理,把给定字符串的每个后缀都插入字典树,要注意不要把相同的子串重复计数了,因此设置一个id标记,判断之前一个计数是不是当前字符串计数的。
另外字典树的数组要设置的大一些,,,不然会TLE。
#include<bitset> //G++ 109 ms #include<map> #include<vector> #include<cstdio> #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<stack> #include<queue> #include<set> #define inf 0x3f3f3f3f #define mem(a,x) memset(a,x,sizeof(a)) using namespace std; typedef long long ll; typedef pair<int,int> pii; inline int in() { int res=0;char c; while((c=getchar())<'0' || c>'9'); while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res; } const int N=1000010; struct trie { int next[27]; bool flag; int num,id; void init() { flag=0; num=0; id=-inf; mem(next,-1); } }trie ; char word[22]; int tot; void insert(int i,int id,int n) { int now=0,tmp,next; for(;i<n;i++) { tmp=word[i]-'a'; next=trie[now].next[tmp]; if(next==-1) { next = ++tot; trie[next].init(); trie[now].next[tmp]=next; } if(trie[now].id!=id) { trie[now].id=id; trie[now].num++; } now=next; } if(trie[now].id!=id) { trie[now].id=id; trie[now].num++; } trie[now].flag=1; } int query() { int n=strlen(word); int now=0,tmp,next; for(int i=0;i<n;i++) { tmp=word[i]-'a'; next=trie[now].next[tmp]; if(next==-1) return 0; now=next; } return trie[now].num; } int main() { int T=in(); tot=0; trie[0].init(); while(T--) { gets(word); int n=strlen(word); for(int i=0;i<n;i++) insert(i,T,n); } int q=in(); while(q--) { gets(word); printf("%d\n",query()); } return 0; }
相关文章推荐
- OC分类(Category)的作用和注意事项
- 理解快速傅里叶变换(FFT)算法
- 关键字const总结
- 错误:类型List不带有参数;java中import导入问题
- 学习Activiti工作流框架的API
- UITextView内容添加后,自动滚动到最后一行
- 安卓:ListFragment
- solrj正确的日志信息
- C++内存对象查看
- hdu1160FatMouse's Speed DP
- 图像处理与计算机视觉 基础、经典以及最近发展
- 三、抽象类和接口的对比-----《大话设计模式》
- 静态代理模式
- 程序调试经验
- OBJC_ASSOCIATION 关联学习
- JSPWebShell的进一步提权
- int open(const char * pathname, int flags); http://c.biancheng.net/cpp/html/238.html
- Atlassian JIRA为自定义事件发送通知
- 查找目录下的所有文件中是否含有某个字符串 :正则表达式、find、grep、xargs、awk、sed等
- R-字符串操作