Uvalive 6832 Bit String Reordering

来源:互联网 发布:淘宝买家秀大尺度男 编辑:程序博客网 时间:2024/05/22 11:55
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int N,M,ans,n1,n2,m1,m2,fi,minn;//n1 stand for the number of zero//n2 stand for the number of oneint a[20],b[20],c[20],d[20];bool vis[20];void fun(){ans=0;memset(vis,false,sizeof(vis));for(int i=0;i<N;i++)d[i]=a[i];for(int i=0;i<N;i++){if(d[i]==c[i])continue;for(int j=i+1;j<N;j++){if(c[j]!=c[i]&&c[j]!=d[j]&&!vis[j]){d[i]=c[i];d[j]=c[j];ans+=(j-i);vis[i]=true;vis[j]=true;//test/*for(int k=0;k<N;k++)printf("%d ",d[k]);printf("\n");*/break;}}}}int main(){while(scanf("%d%d",&N,&M)!=EOF){minn=9999999;n1=n2=m1=m2=0;for(int i=0;i<N;i++){scanf("%d",&a[i]);if(a[i]==0)n1++;elsen2++;}for(int i=0;i<M;i++){scanf("%d",&b[i]);if(i%2)m2+=b[i];elsem1+=b[i];}//printf("%d %d %d %d\n",n1,n2,m1,m2);if(n1>n2){if(m1>m2)fi=0;elsefi=1;}else if(n1<n2){if(m1<m2)fi=0;elsefi=1;}if(n1!=n2){//printf("fi=%d\n",fi);for(int i=0,j=0;j<M;j++){for(int k=0;k<b[j];k++){c[i+k]=fi;}fi=(fi+1)%2;i+=b[j];}//test/*for(int i=0;i<N;i++){printf("%d ",c[i]);}printf("\n");*/fun();minn=min(ans,minn);}else{fi=0;for(int i=0,j=0;j<M;j++){for(int k=0;k<b[j];k++){c[i+k]=fi;}fi=(fi+1)%2;i+=b[j];}fun();minn=min(ans,minn);fi=1;for(int i=0,j=0;j<M;j++){for(int k=0;k<b[j];k++){c[i+k]=fi;}fi=(fi+1)%2;i+=b[j];}fun();minn=min(ans,minn);}printf("%d\n",minn);}}

0 0
原创粉丝点击