CF AIM Tech Round 3 (Div. 2) D - Recover the String

来源:互联网 发布:中韩农产品贸易数据 编辑:程序博客网 时间:2024/06/05 20:19

模拟

首先可以求出 0 和 1 的个数

之后按照01 10 的个数贪心安排

细节太多 错的都要哭了

#include<bits/stdc++.h>using namespace std;int main(){int a,b,c,d;while(~scanf("%d %d %d %d",&a,&b,&c,&d)) {int suc = 1;int t1,t2;t1 = sqrt(2*a); t2 = sqrt(2*d);t1 ++; t2 ++;if(t1*(t1-1) != 2*a || t2*(t2-1) != 2*d) suc = 0;if(d == 0) {if(!suc) printf("Impossible\n");else if(b == 0 && c == 0) {for(int i = 0; i < t1; ++i) printf("0"); printf("\n");}else if(b+c == t1) {if(t1 == 1) {if(b) printf("01\n");else printf("10\n");continue;}int cc = 0;if(cc == b) printf("1");for(int i = 0; i < t1; ++i) {printf("0");cc ++;if(cc == b) printf("1");} printf("\n");}else printf("Impossible\n");continue;}else if(a == 0) {if(!suc) printf("Impossible\n");else if(b == 0 && c == 0) {for(int i = 0; i < t2; ++i) printf("1"); printf("\n");}else if(b+c == t2) {int cc = 0;if(cc == c) printf("0");for(int i = 0; i < t2; ++i) {printf("1"); cc ++;if(cc == c) printf("0");} printf("\n");}else printf("Impossible\n");continue;}if(b+c != t1*t2) suc = 0;int num1 = 0, pos1 = 0;num1 = c/t1; pos1 = c%t1;int all = num1 + (pos1 > 0);if(all > t2) suc = 0;if(suc) {for(int i = 0; i < num1; ++i) printf("1");int cc = t1;for(int i = 0; i < t1; ++i) {cc --;printf("0");if(cc == pos1 && cc != 0) printf("1");  }for(int i = 0; i < t2-all; ++i) printf("1"); printf("\n");}else printf("Impossible\n");}return 0;}


0 0
原创粉丝点击