记录编号 250652 评测结果 WTTEEEETTT
题目名称 字符串 最终得分 0
用户昵称 GravatarTZJerry 是否通过 未通过
代码语言 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;
}