后缀字符串 计蒜客模拟赛

Posted stul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后缀字符串 计蒜客模拟赛相关的知识,希望对你有一定的参考价值。

一天蒜头君得到 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

 








以上是关于后缀字符串 计蒜客模拟赛的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客 蓝桥模拟 B.素数个数

火山喷发 计蒜客16862 NOIP模拟赛 概率DP

计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

计蒜客NOIP2017提高组模拟赛day2-小区划分

计蒜客2017.9.9 Day1 NOIP模拟赛

计蒜客 蓝桥模拟 A. 结果填空:矩阵求和