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

时间:2021-09-13 13:58:35

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("\n");
}
return 0;
}