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