题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1112
题目解析:给一个字符串,统计长度为n的字符串是否出现过,如果出现过,则让ans++,其中ans是所有字符串的总个数。
代码如下:
#include<cstdio>
02.
#include<cstring>
03.
#include<string>
04.
#include<map>
05.
using
namespace
std;
06.
int
main()
07.
{
08.
int
icase;
09.
scanf
(
"%d"
,&icase);
10.
while
(icase--)
11.
{
12.
int
n;
13.
char
str[100000];
14.
map<string,
int
>m;
//一一映射
15.
scanf
(
"%d"
,&n);
16.
scanf
(
"%s"
,str);
17.
int
len=
strlen
(str);
18.
m.clear();
19.
for
(
int
i=0;i<=len-n;i++)
20.
{
21.
string s;
22.
for
(
int
j=i;j<=i+n-1;j++)
23.
s+=str[j];
24.
m[s]++;
25.
}
26.
map<string,
int
>::iterator it;
//迭代器
27.
int
ans=0;
28.
for
(it=m.begin();it!=m.end();it++)
29.
{
30.
int
t=it->second;
31.
if
(t>=2)
32.
ans+=t-1;
33.
}
34.
printf
(
"%d\n"
,ans);
35.
}
36.
return
0;
37.
}