比赛 |
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;
}