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

AIM Tech Round 3 (Div. 2) 题解

2016-08-25 11:05 417 查看
总结:做了3道,补题1道

A. Juicer

题意:水题

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
using namespace std;
typedef long long ll;
#define maxn 1000005
ll c[maxn];
void init(){
c[0] = c[1] = 0;
for(ll i = 2;i < maxn;i ++){
c[i] = (i * (i - 1)) / 2;
}
}
int main()
{
ll a0,a1,a2,a3;

cin >> a0 >> a1 >> a2 >> a3;
if(a0 + a1 + a2 + a3 == 0) {
cout << "0" << endl;
return 0;
}
init();
int s0,s1;         //代表0,1的个数
bool flag1,flag2;
flag1 = flag2 = false;
for(int i = 0;i < maxn;i ++){
if(c[i] == a0){
s0 = i;
flag1 = true;
break;
}
}
for(int i = 0;i < maxn;i ++){
if(c[i] == a3){
s1 = i;
flag2 = true;
break;
}
}
if(!flag1 || !flag2){
cout << "Impossible" << endl;
}
else{
if(s1 == 0){
if(a1 || a2) s1 = 1;
}
if(s0 == 0){
if(a1 || a2) s0 = 1;
}
if((a1+a2+a3+a0) != c[s1+s0]) cout << "Impossible" << endl;
else if(!s0 || !s1){
if(s0) for(int i = 0;i < s0;i ++) cout << "0";
if(s1) for(int i = 0;i < s1;i ++) cout << "1";
cout << endl;
}
else{
int s = a2;
int cc = s/s0;
int dd = s0 - s % s0;            //s0可能是0,所以前面分类讨论要把s0==0 || s1 == 0的case单独讨论
for(int i = 0;i < cc;i ++) cout << "1";
for(int i = 0;i < dd;i ++) cout << "0";
if(s%s0)
cout << "1";
for(int i = 0;i < s % s0;i ++) cout << "0";
int ee = s1-s/s0;
ee = s%s0 == 0? ee : ee - 1;
for(int i = 0;i < ee;i ++) cout << "1";
cout << endl;
}
}
return 0;
}


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