您的位置:首页 > 大数据 > 人工智能

AIM Tech Round 3 (Div. 2)

2017-08-22 20:50 447 查看
A题,读错题意,坑了好久,大于d的橘子不用加,每次总和大于b之后就要清空,然后答案加1

#include<bits/stdc++.h>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define pii pair<int,int>
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1

using namespace std;

const double g=10.0,eps=1e-7;
const int N=100000+10,maxn=1000000+10,inf=0x3f3f3f;

map<ll,ll>ans;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
for(ll i=1;i<=1e5;i++)ans[i*(i-1)/2]=i;
ll a,b,c,d;
cin>>a>>b>>c>>d;
if(a==0&&b==0&&c==0&&d==0)
{
cout<<"0"<<endl;
return 0;
}
ll aa=ans[a],dd=ans[d];
if(ans[a]==0||ans[d]==0)
{
cout<<"Impossible"<<endl;
return 0;
}
if(b==0&&c==0)
{
if(a==0&&d!=0)cout<<string(dd,'1')<<endl;
else if(a!=0&&d==0)cout<<string(aa,'0')<<endl;
else if(a!=0&&d!=0)cout<<"Impossible"<<endl;
return 0;
}
if(aa*dd!=c+b)
{
cout<<"Impossible"<<endl;
return 0;
}
string s=string(dd,'1');
int p=b/dd;
b-=p*dd;
s=string(p,'0')+s;
p=c/dd;
c-=p*dd;
s=s+string(p,'0');
if(c==0&&b==0)
{
cout<<s<<endl;
return 0;
}
int one=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='1')one++;
if(one==c)
{
//  cout<<i<<endl;
s=s.substr(0,i+1)+'0'+s.substr(i+1,s.size());
break;
}
}
cout<<s<<endl;
return 0;
}
/********************
1 2 2 1
ans[2]=1,
********************/


D
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: