[ 9.28 ]CF每日一题系列—— 940A规律构造

Description:

  输入a,b,x,给你a个0,b个1,你要给出一个组合,让这个组合里存在x位,使得这x为和其x+1位不相等

Solution:
  因为肯定有一个正确的答案,所以钻了一下空子,贪心,让个数多的在前,然后0101这样添加,知道最后一个需要满足的x,因为我这么贪心可定是能找到一个满足的,所以对于最后一个必然存在一个0/1和当前的倒数第一位不同,所以觜最后连续填充0/1,的到最后一个满足的x

Code:

  

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
    int a,b,x;
    while(~scanf("%d%d%d",&a,&b,&x))
    {
        swap(a,b);
        int usenum = 1;
        if(a < b)usenum = 0;
        printf("%d",usenum);
        if(usenum == 0)b--;
        else a--;
        int out = usenum;
        for(int i = 1;i < x;++i)
        {
            out = i & 1 == 1 ? usenum^1 : usenum;
            if(out == 1)a--;
            else b--;
            printf("%d",out);
        }
        if(out == 1)
        {
            while(a)
            {
                printf("1");
                a--;
            }
            while(b)
            {
                printf("0");
                b--;
            }
        }
        else
        {
            while(b)
            {
                printf("0");
                b--;
            }
            while(a)
            {
                printf("1");
                a--;
            }
        }
        printf("
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/DF-yimeng/p/9720407.html