比赛 20241023 评测结果 AAATTTTTTTTTTTT
题目名称 The 'Winning' Gene 最终得分 20
用户昵称 健康铀 运行时间 48.919 s
代码语言 C++ 内存使用 3.58 MiB
提交时间 2024-10-23 10:50:03
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=3005;
int n,b[N],vis[N],ans[N];
string s;
struct node{
	string t;
	int id;
}a[N];
bool cmp(node x,node y){
	if(x.t==y.t)return x.id<y.id;
	return x.t<y.t;
} 
int main(){
	freopen("winninggene.in","r",stdin);
	freopen("winninggene.out","w",stdout);
	cin>>n>>s;
	s=" "+s;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			for(int k=1;k<=n-j+1;k++){
				a[k].id=k;
				a[k].t="";
				for(int t=k;t<=k+j-1;t++){
					a[k].t+=s[t];
				}
			}
			sort(a+1,a+n-j+2,cmp);
			for(int k=1;k<=n-j+1;k++){
				b[a[k].id]=k;
				vis[k]=0;
			}
			for(int k=1;k<=n-i+1;k++){
				int minn=k;
				for(int t=k+1;t<=k+i-j;t++){
					if(b[t]<b[minn])minn=t;
				}
				vis[minn]=1;
			}
			int sum=0;
			for(int k=1;k<=n-j+1;k++){
				if(vis[k])sum++;
			}
			ans[sum]++;
		}
	}
	for(int i=1;i<=n;i++){
		printf("%d\n",ans[i]);
	}
	return 0;
}