比赛 |
20160415 |
评测结果 |
ATTEEEEEEE |
题目名称 |
字符串 |
最终得分 |
10 |
用户昵称 |
lxtgogogo |
运行时间 |
2.809 s |
代码语言 |
C++ |
内存使用 |
10.72 MiB |
提交时间 |
2016-04-15 11:51:55 |
显示代码纯文本
/*
Language: c++
Author: lxtgogogo
Date: 2016.04.15
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<queue>
using namespace std;
inline int read(){
int x=0;bool f=true;char ch=getchar();
while(ch>'9' || ch<'0') {if(ch=='-'){f=false;}ch=getchar();}
while(ch>='0' && ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
}
const int r=1010;
int n=0,kk=0;
char str[110][r]={};
int L[110]={};
int ans[110]={};
struct GTMD{//迷之懵逼
int nex[26];
int num;
}tire[100010];
int ge=0;
void getp(int k){
}
void init(){
n=read();kk=read();
for(int i=1;i<=n;i++)
{
scanf("%s",&str[i]);
int nownode=0;
while(str[i][L[i]]>='a' && str[i][L[i]]<='z')
{
L[i]++;
int w=str[i][L[i]]-'a';
if(tire[nownode].nex[w]==0) tire[nownode].nex[w]=++ge;
nownode=tire[nownode].nex[w];
}
tire[nownode].num++;
}
}
/*void dfs(int k){
size[k]=tire[k].num;
for(int i=0;i<26;i++)
if(tire[k].nex[i]!=0)
{
dfs(tire[k].nex[i]);
size[k]+=size[tire[k].nex[i]];
}
}*/
void work1(){
for(int i=1;i<=n;i++)
{
for(int j=0;j<L[i];j++)//枚举一个串的所有子串,我决定直接暴力了。。。
for(int k=j;k<L[i];k++)
{
int cnt=0;
for(int p=1;p<=n;p++)
{
if(cnt>=kk) break;
for(int h=0;h<L[p];h++)
if(str[p][h]==str[i][j])
{
bool flag=true;
for(int l=1;l<=k-j;l++)
if(str[p][h+l]!=str[i][j+l]) {flag=false;break;}
if(flag) {cnt++;break;}
}
}
if(cnt>=kk) ans[i]++;
}
}
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n");
}
void work2(){
for(int i=1;i<=n;i++)
printf("%d ",L[i]*(L[i]-1));
printf("\n");
}
int main(){
freopen("stringa.in","r",stdin);
freopen("stringa.out","w",stdout);
init();
if(n<=100) work1();
else work2();
fclose(stdin);fclose(stdout);
return 0;
}