赞
踩
一天蒜头君得到 nn 个字符串 s_isi,每个字符串的长度都不超过 1010。
蒜头君在想,在这 nn 个字符串中,以 s_isi 为后缀的字符串有多少个呢?
第一行输入一个整数 nn。
接下来 nn 行,每行输入一个字符串 s_isi。
输出 nn 个整数,第 ii 个整数表示以 s_isi 为后缀的字符串的个数。
对于 50\%50% 的数据,1 \le n \le 10^31≤n≤103。
对于 100\%100% 的数据,1 \le n \le 10^51≤n≤105。
所有的字符串仅由小写字母组成。
样例输入复制
3 ba a aba
样例输出复制
2 3 1
题目来源
因为题目中只包含a-z小写字母,所以可以把字符串看为26进制的数字,然后用map记录下在二十六进制转换为十进制时每个后缀出现的次数
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long int LL;
- const int MAXN(5*1e5);
- const LL INF(0x7f7f7f7f7f7f7f7f);
- map<LL,int>mp;
- LL a[MAXN+50];
- int main() {
- int n;
- char str[20];
- scanf("%d",&n);
- for(int i=1;i<=n;i++) {
- scanf("%s",str);
- LL temp=0,digit=1;
- for(int j=strlen(str)-1;j>=0;j--) {
- temp=temp+(str[j]-'a'+1)*digit;
- mp[temp]++;
- digit*=26;
- }
- a[i]=temp;
- }
- for(int i=1;i<=n;i++) {
- cout<<mp[a[i]]<<endl;
- }
- }
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。