1. 程式人生 > >後綴字符串 計蒜客模擬賽

後綴字符串 計蒜客模擬賽

max return 個數 text ide pen %d play 末尾

一天蒜頭君得到 nnn 個字符串 sis_isi?,每個字符串的長度都不超過 101010。

蒜頭君在想,在這 nnn 個字符串中,以 sis_isi? 為後綴的字符串有多少個呢?

輸入格式

第一行輸入一個整數 nnn。

接下來 nnn 行,每行輸入一個字符串 sis_isi?

輸出格式

輸出 nnn 個整數,第 iii 個整數表示以 sis_isi? 為後綴的字符串的個數。

數據範圍

對於 50%50\%50% 的數據,1≤n≤1031 \le n \le 10^31n103。

對於 100%100\%100% 的數據,1≤n≤1051 \le n \le 10^51n105。

所有的字符串僅由小寫字母組成。

樣例輸入

3
ba
a
aba

樣例輸出

2
3
1


用map和string配合使用。代碼很短。
其中string裏面的substr()函數,
s.substr(0,5)返回的是s裏面0-4這五個字符。
s.substr(5) 返回的是s裏面第5個到末尾的所有字符。
所以這個題目,就可以講輸出的字符串存到map<string,int>裏面。 每一個子串的數量從0開始,mp【子串】++計數。然後直接輸出map【s[i]】,也就是後綴字符串的數量了。
技術分享圖片
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4
#include <map> 5 using namespace std; 6 const int maxn = 1e5+9; 7 int n; 8 string s[maxn]; 9 map<string,int> mp; 10 int main() 11 { 12 scanf("%d",&n); 13 for(int i = 0; i < n; i++) 14 { 15 cin>>s[i]; 16 for(int j = 0; j < s[i].length(); j++)
17 mp[s[i].substr(j)]++; 18 } 19 for(int i = 0; i < n; i++) 20 cout<<mp[s[i]]<<endl; 21 return 0; 22 }
View Code

後綴字符串 計蒜客模擬賽