codeforcesB. Binary Colouring
题目:



思路:
这个题目如果没有第三个限制条件,那很好做,直接按位输出即可,但是条件三要求相邻位不能都是1
这时我们就要考虑-1的作用了,根据一些例子我们可以推导出一个公式
也就是当第i位和i+1位都是1时,让第i位变成-1,第i+2位变成1
总代码:
#include<iostream>
#include<cassert>
using namespace std;
int X;
int A[50];
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin>>T;for(;T--;){cin>>X;for(int i=0;i<50;i++)A[i]=0;for(int i=0;i<32;i++){A[i]=X>>i&1;} for(int i=0;i<40;i++){if(A[i]==2){A[i]=0;A[i+1]++;}else if(A[i]==1&&A[i+1]==1){A[i]=-1;A[i+1]=0;A[i+2]++;}}cout<<32<<"\n";for(int i=0;i<32;i++)cout<<A[i]<<(i==31?"\n":" ");}
}