http://www.elijahqi.win/archives/3913
我是先构造了 0,1,0,1的情况尝试满足条件 然后再分类讨论的
#include<bits/stdc++.h>
using namespace std;
inline char gc(){
static char now[1<<16],*S,*T;
if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}
return *S++;
}
inline int read(){
int x=0,f=1;char ch=gc();
while(!isdigit(ch)) {if (ch=='-') f=-1;ch=gc();}
while(isdigit(ch)) {x=x*10+ch-'0',ch=gc();}
return x*f;
}
const int N=220;
int a,b,x,n;deque<int> q;
int main(){
// freopen("b.in","r",stdin);
a=read();b=read();x=read();
n=a+b;q.push_back(0);--a;
int now=0,cnt=0;
for (int i=2;i<=n;++i){
if(!b||!a) break;
++cnt;now^=1;q.push_back(now);
if (i&1) --a;else --b;
if (cnt==x) break;
}
if (cnt==x-2){
q.push_front(1);--b;
if (b>0) for (int i=1;i<=b;++i) q.push_back(1);
}else{
if(cnt<x) {
if (a>0) for (int i=1;i<=a;++i) q.push_back(0);
if (b>0) for (int i=1;i<=b;++i) q.push_front(1);
}else{
if (a>0) for (int i=1;i<=a;++i) q.push_front(0);
if (b>0) {
if (q.back()!=1){
q.pop_back();
for (int i=1;i<=b;++i) q.push_back(1);
q.push_back(0);
}else
for (int i=1;i<=b;++i) q.push_back(1);
}
}}
while(!q.empty()) printf("%d",q.front()),q.pop_front();
return 0;
}