Bit String Reordering

来源:互联网 发布:mac系统怎么保存文件 编辑:程序博客网 时间:2024/05/17 23:56

A题 点击打开链接


题意  输入给出n,m


输入n个数(数为0或1),输入m个数

m的数值是在这一段区间中数字相同的个数 ‘

#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int a[15],b[15];int main(){    int n,m;    int f,z;    int c1,c2;    while(~scanf("%d %d",&n,&m))    {        memset(b,0,sizeof(b));        f=0;z=0;//记录1和0的个数        c1=0;c2=0;//记录奇数项和与偶数项和        int ci=100000,ans=100000;        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            if(a[i]==1)                f++;            else z++;        }        for(int i=1;i<=m;i++)        {            scanf("%d",&b[i]);            if(i%2)                c1+=b[i];            else c2+=b[i];        }        int res=0,t=0;        int sum=1;//记录在整个长度的下标        if(c1==z)        {            ci=0;            for(int i=1;i<=m;i+=2)            {                res=b[i];t=0;//res记录在此区间有几个相同的值                for(int j=1;j<=n;j++)                {                    if(a[j]==0)                    {                       ci+=abs(sum-j);//移动的次数                       sum++;                        t++;//移动了几位                       a[j]=3;//表示当前位置已经用过                       if(t==res)                        break;                    }                }                    sum+=b[i+1];            }        }        if(c1==f)        {            ans=0;res=0;sum=1;t=0;           for(int i=1;i<=m;i+=2)            {                res=b[i];t=0;                for(int j=1;j<=n;j++)                {                    if(a[j]==1)                    {                       ans+=abs(sum-j);                       sum++;                        t++;                       a[j]=3;//表示当前位置已经用过                       if(t==res)                        break;                    }                }                    sum+=b[i+1];            }        }        ci=min(ci,ans);//用来判断当1和0个数相同时,那种方式次数最少        printf("%d\n",ci);    }    return 0;}


原创粉丝点击