首页 > 代码库 > wikioi 1306 机智Trie树
wikioi 1306 机智Trie树
题目描述 Description
看广播操无聊得很~你有觉得吗?在看广播操一波又一波的人潮涌过再退去。觉得很没意思……于是,偶们的大神犇JHT发明了一个及其好玩的游戏~
把每一班级的队形看成一个字母(仅可能为大写字母),然后按他们的出场顺序无聊地排成一串,成为了一个著名的字符串!JHT神犇想看看一个年级中,一共有多少种不同的出场组合(LCZ:说白了就是求字符串内的非空子串的数量!)。
输入描述 Input Description
1行:一个字符串s
输出描述 Output Description
1行:一个数字(s字符串的不同非空子串数)
样例输入 Sample Input
AAABBBCCC
样例输出 Sample Output
36
数据范围及提示 Data Size & Hint
时间限制 Time Limitation
前8点每点1s
后2点每点1.5s
字符串长度 Hint
10%的数据:1≤字符串s的长度≤100
80%的数据:1≤字符串s的长度≤1200
100%的数据:1≤字符串s的长度≤1500
这题刚开始暴力取的子串,然后加入Trie树,然后T了,在取子串的时候T的,然后就没有然后了。下载了别人的代码才发现取子串的机智,详见代码。
#include <cstdio> #include <cstring> #include <algorithm> #include<iostream> #include<bitset> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; char s[1505]; int sum,i,j,len,u,ch[1200000][26]; int main() { scanf("%s",s); len=strlen(s); for(i=0;i<len;i++) { u=0; for(j=i;j<len;j++) { int c=s[j]-'A'; if(!ch[u][c]) ch[u][c]=++sum; u=ch[u][c]; } } cout<<sum<<endl; return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。