UVALive - 6832 Bit String Reordering (找规律)

题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=79052

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>

using namespace std;

int main()
{
    int n,m;

    while(~scanf("%d%d",&n,&m))
    {
        int a[20],b[20];

        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        for(int j=0; j<m; j++)
        {
            scanf("%d",&b[j]);
        }
        int base1[20],base2[20];
        int temp=1,k=0;

        for(int i=0; i<n; i=i+b[k++])
        {
            for(int j=i; j<i+b[k]; j++)
            {
                if(temp==1)
                    base1[j]=1;
                if(temp==0)
                    base1[j]=0;
            }
            if(temp==1)
                temp=0;
            else if(temp==0)
                temp=1;

        }
        temp=0;
        k=0;
        for(int i=0; i<n; i=i+b[k++])
        {
            for(int j=i; j<i+b[k]; j++)
            {
                if(temp==1)
                    base2[j]=1;
                if(temp==0)
                    base2[j]=0;
            }
            if(temp==1)
                temp=0;
            else if(temp==0)
                temp=1;

        }
        /*for(int i=0;i<n;i++)
        {
            printf("%d ",base1[i]);
        }
        printf("\n");
        for(int i=0;i<n;i++)
        {
            printf("%d ",base2[i]);
        }*/
        int ans1=0;
        int ans2=0;
        int ans3=0;
        int flag1=0;
        int flag2=0;
        int flag3=0;
        int ui1[20];
        int ui2[20];
        int ui3[20];
        int num=0;
        for(int i=0; i<n; i++)
        {
            if(a[i]==1)
            {
                ans1=ans1+i;
                flag1++;
                ui1[num++]=i;
            }
        }
        num=0;
        for(int i=0; i<n; i++)
        {
            if(base1[i]==1)
            {
                ans2=ans2+i;
                flag2++;
                ui2[num++]=i;
            }
        }
        num=0;
        for(int i=0; i<n; i++)
        {
            if(base2[i]==1)
            {
                ans3=ans3+i;
                flag3++;
                ui3[num++]=i;
            }
        }
        /*printf("\n");
        printf("%d %d %d %d %d %d\n",ans1,ans2,ans3,flag1,flag2,flag3);
        if(flag1==flag2&&flag1==flag3)
            printf("%d\n",min(abs(ans2-ans1),abs(ans3-ans1)));
        else if(flag1==flag2)
            printf("%d\n",abs(ans2-ans1));
        else if(flag1==flag3)
            printf("%d\n",abs(ans3-ans1));*/
        //printf("\n");
        if(flag1==flag2&&flag1==flag3)
        {
            int ans1=0,ans2=0;
            for(int i=0;i<flag1;i++)
            {
                ans1=ans1+abs(ui1[i]-ui2[i]);
                ans2=ans2+abs(ui1[i]-ui3[i]);
            }
            printf("%d\n",min(ans1,ans2));
        }
        else if(flag1==flag2)
        {
            int ans1=0;
            for(int i=0;i<flag1;i++)
            {
                ans1=ans1+abs(ui1[i]-ui2[i]);
            }
            printf("%d\n",ans1);
        }
        else if(flag1==flag3)
        {
            int ans1=0;
            for(int i=0;i<flag1;i++)
            {
                //printf("%d %d\n",ui1[i],ui2[i]);
                ans1=ans1+abs(ui1[i]-ui3[i]);
            }
            printf("%d\n",ans1);
        }
    }
}
/*
13 7
0 0 0 1 0 1 0 1 0 0 1 1 0 //3 5 7 10 11
0 0 0 0 0 1 1 1 0 1 0 1 0 //5 6 7 9  11

1 1 1 1 1 0 0 0 1 0 1 0 1
*/

以前不懂事,没有任何一件事是有耐心做下来。习与没学好,玩与没玩好。还辜负了太多。

上了大学,下定决心改掉懒惰,改掉骄傲。他妈的,学了一年acm。和周围的人差距越来越大。

唯上智与下愚不移。这不移需要太大的勇气了。

like a joke!

你可能感兴趣的:(UVALive - 6832 Bit String Reordering (找规律))