http://codeforces.com/problemset/problem/1003/B
解题思路:
1. a个0,b个1,构造一个有x个相邻字符不相等的二进制字符串
2.在纸上构造一下就可以发现一个“01”串有一个相邻字符不相等,每往后增加一个“01”(例如“0101”)就会增加两个相邻字符不相等。由于数据保证答案存在,并且01必定至少有一个,那么我就构造如上的字符串(首先令x+1,修正第一个“01”只有一个相邻字符不相等的情况)。当构造完x个相邻不相等字符后,剩余的01字符分别往串头和串尾添加不影响相邻不相等字符数。
3.如上构造后会WA7,因为还要考虑一个字符1可能比字符0大的情况,考虑临界状态,那么应该以相反情况“10”串的形式构造。
4.我写的代码冗余比较大,但又不知道如何去简化,烦恼!
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(),b = sc.nextInt(),x = sc.nextInt();
x++;
Vector<Integer> v = new Vector<>();
if(a > b) {
while (x >= 2) {
v.add(0);
v.add(1);
x -= 2;
a--;
b--;
}
if (x == 0) {
for (int i = 0; i < a; i++)
System.out.print(0);
}
for (int i : v)
System.out.print(i);
for (int i = 0; i < b; i++)
System.out.print(1);
if(x != 0) {
for (int i = 0; i < a; i++)
System.out.print(0);
}
} else {
while (x >= 2) {
v.add(1);
v.add(0);
x -= 2;
a--;
b--;
}
if (x == 0) {
for (int i = 0; i < b; i++)
System.out.print(1);
}
for (int i : v)
System.out.print(i);
for (int i = 0; i < a; i++)
System.out.print(0);
if (x != 0) {
for (int i = 0; i < b; i++)
System.out.print(1);
}
}
}
}