codeforces 解题报告 1003B. Binary String Constructing 构造

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);
            }
        }
    }
}

发布了135 篇原创文章 · 获赞 12 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章