比赛 20151028a 评测结果 AAAAAAAATAAAAAAAAATTAAATTTTTTTTTTTTAAAATTTTTT
题目名称 愉快的logo设计 最终得分 53
用户昵称 Shirry 运行时间 23.319 s
代码语言 C++ 内存使用 20.34 MiB
提交时间 2017-09-21 20:24:52
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1500000;
int k,ans=maxn,a[12]={1,4,16,64,256,1024,4096,16384,65536,262144,1048576};
char s[maxn*2],c[5]={'0','J','O','I'};
char b[12][maxn];
void init(){
	for(int i=1;i<=k;i++){
		for(int p=1;p<=3;p++)
			for(int j=1;j<=a[i-1];j++)
				b[i][(p-1)*a[i-1]+j]=c[p];
	}
}
void dfs(int now,int x,int num){//now: position  x:now is 4^x  num:the new ans
	if(num>=ans)return;
	if(x==0){
		ans=min(ans,num);
		return;}
	for(int i=now,j=i-now+1;i<now+a[x-1]*3;i++,j++){
		if(s[i]!=b[x][j])num++;
	}
	dfs(now+a[x-1]*3,x-1,num);
}
int main(){
	freopen("JOI.in","r",stdin);
	freopen("JOI.out","w",stdout);
	scanf("%d%s",&k,s+1);
	init();
	for(int i=1;i<=a[k];i++)s[i+a[k]]=s[i];
	for(int i=1;i<=a[k];i++)dfs(i,k,0);
	printf("%d\n",ans);
	return 0;
}