【uva11732】"strcmp()" Anyone?
来源:互联网 发布:led控制软件下载 编辑:程序博客网 时间:2024/05/18 23:56
题目链接:https://vjudge.net/problem/UVA-11732
题解:
建一棵trie树,每次经过一个点,该点的计数器+1
插入的时候顺便统计,分字符相同(*2)和不同(*1)讨论一下就好
注意最后一位的比较,可以都赋值为47(’\’)
考虑到串只有4000个但串比较长,需要使用左儿子右兄弟表示法
下面的代码会T,我也没办法啊(一脸无辜),路过的大佬们帮忙看看
时限2s,极限数据3.5s,难道这就是所谓的卡常数?
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define LL long longusing namespace std;const int N=4000010;int son[N],bro[N],val[N];int T,n;LL ans;char str[4010];char ch[N];int size;void insert(char *s){ int len=strlen(s+1),t=1,p; val[1]++; for(int i=1;i<=len+1;i++) { for(p=son[t];p;p=bro[p]) if(ch[p]==s[i]) break; if(p==0) { p=++size; ch[p]=s[i]; bro[p]=son[t]; son[p]=0; val[p]=1; son[t]=p; ans+=val[t]-1; t=p; } else ans+=val[t]-1+val[t],val[p++],t=p; }}int main(){// freopen("in.in","r",stdin);// freopen("out1.out","w",stdout); while(~scanf("%d",&n)&&n) { size=1; ch[1]=val[1]=bro[1]=son[1]=0; ans=0; for(int i=1;i<=n;i++) { scanf("%s",str+1); insert(str); } printf("Case %d: %lld\n", ++T, ans); } return 0;}
阅读全文
0 0
- [UVA11732] strcmp() Anyone? && 字符串
- UVa11732 "strcmp()" Anyone?
- uva11732 "strcmp()" Anyone?
- uva11732 "strcmp()" Anyone?
- 【uva11732】"strcmp()" Anyone?
- uva11732 - strcmp() Anyone? 前缀树
- UVa11732 Strcmp,Anyone?[Trie树]
- UVA11732 strcmp() Anyone?(Trie树)
- 字典树("strcmp()" Anyone? uva11732)
- uva11732 strcmp 字典树 存储
- Uva-11732-strcmp() Anyone?
- Uva 11732 strcmp() Anyone?
- uva 11732 - strcmp() Anyone?
- UVa:11732 strcmp() Anyone?
- UVA - 11732 strcmp() Anyone?
- UVa 11732 - strcmp() Anyone?
- UVa 11732 strcmp() Anyone?
- UVa 11732 strcmp() Anyone?
- 学期末总结--by07/24?
- Robot Framework入门
- NOIP模拟赛 baoj2933数据
- 初学opencv/haar特征人脸检测
- Shell命令之将iOS的APP安装到模拟器中
- 【uva11732】"strcmp()" Anyone?
- (嵌入式)关于arm中的存储控制器(一)
- 在struts2框架中配置validate中出现404问题
- VIM列编辑
- 解决win10 composer xdebug 冲突
- [绍棠_swift] Swift中的继承、构造器
- 基于ceph的cinder backup功能代码分析
- Excel中时间戳转换时间
- HDU--dp练习--1009--Big Event in HDU