记录编号 |
250652 |
评测结果 |
WTTEEEETTT |
题目名称 |
字符串 |
最终得分 |
0 |
用户昵称 |
TZJerry |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
5.336 s |
提交时间 |
2016-04-15 16:50:55 |
内存使用 |
10.42 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<vector>
#include<algorithm>
#include<queue>
#define ll long long
#define maxn 100001
using namespace std;
int n,k;
char a[101][maxn];
char b[maxn];
int p[maxn];
bool check(int str,int end,int len,int w)
{
int lenn=0;
for(int j=str;j<=end;j++){b[lenn]=a[w][j];lenn++;}
memset(p,0,sizeof(p));
int j=-1;
p[0]=-1;
for(int i=1;i<=lenn;i++)
{
while(j>-1 && b[j+1]!=b[i]) j=p[j];
if(b[j+1]==b[i]) j++;
p[i]=j;
}
int num=0;
for(int kk=1;kk<=n;kk++)
{
j=-1;
for(int i=0;i<strlen(a[kk]);i++)
{
while(j>-1 && b[j+1]!=a[kk][i]) j=p[j];
if(b[j+1]==a[kk][i]) j++;
if(j==lenn-1) {num++;break;}
}
if(num==k) return true;
}
return false;
}
void work()
{
int sum;
for(int i=1;i<=n;i++)
{
sum=0;
for(int len=1;len<=strlen(a[i]);len++)
{
for(int str=0;str<=strlen(a[i])-len;str++)
{
int end=str+len-1;
if(check(str,end,len,i)==true) sum++;
}
}
cout<<sum<<' ';
}
}
int main()
{
freopen("stringa.in", "r", stdin);
freopen("stringa.out", "w", stdout);
scanf("%d%d",&n,&k);
for(int i=0;i<=n;i++) gets(a[i]);
work();
return 0;
}