记录编号 453594 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 愉快的logo设计 最终得分 100
用户昵称 GravatarShirry 是否通过 通过
代码语言 C++ 运行时间 1.293 s
提交时间 2017-09-21 20:25:26 内存使用 71.81 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Sum(l,r,t) (sum[r][t]-sum[l-1][t])
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];
int sum[maxn*2][3],f[maxn*2][3];
int main(){
	freopen("JOI.in","r",stdin);
	freopen("JOI.out","w",stdout);
	scanf("%d%s",&k,s+1);
	for(int i=1;i<=a[k];i++)s[i+a[k]]=s[i];
	for(int i=1;i<=a[k]*2;i++){
		if(s[i]=='J')sum[i][0]=sum[i-1][0]+1,sum[i][1]=sum[i-1][1],sum[i][2]=sum[i-1][2];
		if(s[i]=='O')sum[i][1]=sum[i-1][1]+1,sum[i][0]=sum[i-1][0],sum[i][2]=sum[i-1][2];
		if(s[i]=='I')sum[i][2]=sum[i-1][2]+1,sum[i][0]=sum[i-1][0],sum[i][1]=sum[i-1][1];
	}
	for(int j=1;j<=k;j++)
		for(int i=1;i+a[j]-1<=a[k]*2;i++)
			f[i][j]=Sum(i,i+a[j-1]-1,1)
			       +Sum(i,i+a[j-1]-1,2)
				   +Sum(i+a[j-1],i+a[j-1]*2-1,0)
				   +Sum(i+a[j-1],i+a[j-1]*2-1,2)
				   +Sum(i+a[j-1]*2,i+a[j-1]*3-1,0)
				   +Sum(i+a[j-1]*2,i+a[j-1]*3-1,1)
				   +f[i+a[j-1]*3][j-1];
	int ans=0x3f3f3f3f;
	for(int i=1;i<=a[k];i++)ans=min(ans,f[i][k]);
	printf("%d\n",ans);
	return 0;
}