wikioi 1306 機智Trie樹
阿新 • • 發佈:2017-06-15
rip margin rac 1.5 ott 增加 block 範圍 code
題目描寫敘述 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; }
wikioi 1306 機智Trie樹