Codeforces Round #704 (Div. 2) D
题意:
a个0,b个1,组成两个数字。
两个数进行相减后二进制1的个数为k。
题解:
二进制加法,细节还是得多想。
k ! = 0 k!=0 k!=0时,如果 k ≤ ( a + b − 2 ) , 2 ≤ b , 1 ≤ a k≤(a+b-2),2≤b,1≤a k≤(a+b−2),2≤b,1≤a 即有答案,
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 200010;
int a, b, k;
int main(){
scanf("%d%d%d",&a,&b,&k);
if(k == 0) {
puts("Yes");
for(int i = 0;i < b;i ++) printf("1");
for(int i = 0;i < a;i ++) printf("0");
puts("");
for(int i = 0;i < b;i ++) printf("1");
for(int i = 0;i < a;i ++) printf("0");
puts("");
}
else if( a+b-2 >= k && b >= 2 && k && a){
puts("Yes");
string s1, s2;
b --;
s1 = '1'; s2 = '1';
a --, b --;
s1 += '1';
s2 += '0';
k --;
while( k -- ) {
if(a){
a --;
s1 += '0';
s2 += '0';
}
else if(b) {
b --;
s1 += '1';
s2 += '1';
}
}
s1 += '0';
s2 += '1';
while(a){
a --;
s1 += '0';
s2 += '0';
}
while(b) {
b --;
s1 += '1';
s2 += '1';
}
cout << s1 << endl << s2 << endl;
}
else{
puts("No");
}
return 0;
}