文章目录
题目链接:
http://codeforces.com/gym/101933/problem/J
题意:给4个数a,b,c,让构造01串,使得子序列子序列中 00 的个数是 a 个,01 是b个,10是c个,11是d个
这道题其实思路是比较好想的,关键就是特判
哇WA得我很无语,用来比赛的话真是道好题啊
第三组数据应该就是4个数都是0的时候,改了这个我就过了第三组T_T
#include"bits/stdc++.h"
using namespace std;
typedef long long LL;
const int maxn=1e5+5;
const int MOD=1e9+7;
vector<int>vec;
int main()
{
LL a,b,c,d;
while(cin>>a>>b>>c>>d)
{
if(a==0 && b==0 &&c==0 && d==0)
{
puts("0");
continue;
}
LL zero=sqrt(2*a);
if(zero*(zero+1)/2!=a)
{
puts("impossible");
continue;
}
LL one=sqrt(2*d);
if(one*(one+1)/2!=d)
{
puts("impossible");
continue;
}
zero++,one++;
/*开始特判*/
if(a==0 && d==0)
{
if(b==1 && c==0)
{
puts("01");
continue;
}
else if(b==0 && c==1)
{
puts("10");
continue;
}
else
{
puts("impossible");
continue;
}
}
if(b==0 && c==0)
{
if(d==0)
{
while(zero-->0)cout<<0;
cout<<endl;
continue;
}
else if(a==0)
{
while(one-->0)cout<<1;
cout<<endl;
continue;
}
}
if(zero*one!=b+c)puts("impossible");
else
{
LL x=b/one,y=b%one;//x表示全在1前面0的个数
while(x-->0)
{
cout<<0;
zero--;
}
LL t=one-y;//剩余0前面的1的个数
while(t-->0)
{
cout<<1;
one--;
}
if(zero>0)
{
cout<<0;
zero--;
}
while(one-->0)cout<<1;
while(zero-->0)cout<<0;
cout<<endl;
}
}
}