D. Genius's Gambit
构造
要是a>=k的构造很好想出来
但是a+b-1>k&&k>a时 其实也可以构造出来
我们考虑让中间的一些1经过减法变成0 然后到高位时再与低位的1相减
例如:
11111100000
10111100001
这样我们最多就可以得到a+b-2个1了!
最后注意特判当b1时 只有k0才有解
当a0时 也只有k0时才有解
void solve(){
int a,b,k;cin>>a>>b>>k;
if(b==1){
if(!k){
YES
for(int i=1;i<=b;i++)cout<<1;
for(int i=1;i<=a;i++)cout<<0;
cout<<endl;
for(int i=1;i<=b;i++)cout<<1;
for(int i=1;i<=a;i++)cout<<0;
cout<<endl;
}else{
NO
}
return;
}
if(a==0&&k){
NO return;
}
if(a+b-1>k){
YES
if(a>=k) {
int cnt = a - k;
for (int i = 1; i <= b; i++)cout << 1;
for (int i = 1; i <= a; i++)cout << 0;
cout << endl;
for (int i = 1; i < b; i++)cout << 1;
while (k--)cout << 0;
cout << 1;
for (int i = 1; i <= cnt; i++)cout << 0;
cout << endl;
}else{
for (int i = 1; i <= b; i++)cout << 1;
for (int i = 1; i <= a; i++)cout << 0;
cout<<endl;
int cnt=a+b-1-k,cnt1=b-cnt;
while(cnt--)cout<<1;
cout<<0;
for(int i=1;i<cnt1;i++)cout<<1;
for(int i=1;i<=a-1;i++)cout<<0;
cout<<1;
cout<<endl;
}
}else{
NO
}
}
标签:704,Codeforces,int,k0,Div,Round
From: https://www.cnblogs.com/ycllz/p/16874248.html