標籤:des style color strong os 資料
題目描述
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;}