Binary String Constructing

You are given three integers a, b and x. Your task is to construct a binary string s of length n=a+b such that there are exactly a zeroes, exactly b ones and exactly x indices i (where 1≤i<n) such that si≠si+1

. It is guaranteed that the answer always exists.

For example, for the string "01010" there are four indices i

such that 1≤i<n and si≠si+1 (i=1,2,3,4). For the string "111001" there are two such indices i (i=3,5

).

Recall that binary string is a non-empty sequence of characters where each character is either 0 or 1.

Input

The first line of the input contains three integers a

, b and x (1≤a,b≤100,1≤x<a+b)

.

Output

Print only one string s

, where s is any binary string satisfying conditions described above. It is guaranteed that the answer always exists.

Examples

Input

2 2 1

Output

1100

Input

3 3 3

Output

101100

Input

5 3 6

Output

01010100

题意:给你a个0,b个1,让你构造用这些数字构造一个序列,并且满足以下条件:

相邻两个数不同的个数为x

感觉自己写的很复杂。

先分两种情况:

1,0的个数比1的个数大

2,   1的个数比0的个数大

在每种情况下,把01(10)看成一组,先尽可能的多放,只到x的值为 1 或 2 时;

首先放一组 01(10)只会消耗x 1点,之后再放一组01  (10)才会消耗x 2点

当x的值为2时,有两种情况

1,之前放了几组01  (10),此时只需把剩下的0  (1)全部放上,再把剩下的1   (0)全部放上

2,之前一组01   (10)都没放 ,此时需要先放一组01   (10),则x又消耗一点了,此时x为1,   再把剩下的1  (0)全部放上

之后把剩下的0  (1)全部放上

当x的值为1时 ,把剩下的1  (0)全部放上 ,  之后把剩下的0  (1)全部放上

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <stack>
#include <queue>
#include <deque>
#include <cstdio>
#include <vector>
#include <numeric>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define  eps 1e-8
#define  PI acos(-1)
#define  INF 0x3f3f3f3f
using namespace std;
const int N=1010;
typedef long long  LL;
const int dir[4][2]= { {1,0},{0,1},{-1,0},{0,-1} };

int GCD(int a,int b)
{
    return b ? GCD(b,a%b) : a;
}

int main()
{
    int i,b,j,k,x,a,l;
    cin>>a>>b>>x;

    if(a>b)
    {
        int flag=0;
        while(x>2)
        {
            if(flag==0)
            {
                printf("01");
                a--;
                b--;
                x--;
                flag=1;
                continue;
            }
            printf("01");
            a--;
            b--;
            x-=2;
        }
        if(x==2)
        {
            if(flag==0)
            {
                printf("01");
                a--;
                b--;
                for(i=0; i<b; i++)
                    printf("1");
                for(i=0; i<a; i++)
                    printf("0");
            }
            else
            {
                for(i=0; i<a; i++)
                    printf("0");
                for(i=0; i<b; i++)
                    printf("1");
            }

        }
        if(x==1)
        {
            for(i=0; i<b; i++)
                printf("1");
            for(i=0; i<a; i++)
                printf("0");
        }
    }
    else
    {
        int flag=0;
        while(x>2)
        {
            if(flag==0)
            {
                printf("10");
                a--;
                b--;
                x--;
                flag=1;
                continue;
            }
            printf("10");
            a--;
            b--;
            x-=2;
        }
        if(x==1)
        {
            for(i=0; i<a; i++)
                printf("0");
            for(i=0; i<b; i++)
                printf("1");
        }
        if(x==2)
        {
            if(flag==0)
            {
                printf("10");
                a--;
                b--;
                for(i=0; i<a; i++)
                    printf("0");
                for(i=0; i<b; i++)
                    printf("1");
            }
            else
            {
                for(i=0; i<b; i++)
                    printf("1");
                for(i=0; i<a; i++)
                    printf("0");
            }
        }
    }
    printf("\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/codertcm/article/details/81238197
今日推荐