码迷,mamicode.com
首页 > 其他好文 > 详细

CF708B Recover the String 构造

时间:2018-12-16 18:05:40      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:map   space   its   style   vector   while   other   amp   names   

For each string s consisting of characters ‘0‘ and ‘1‘ one can define four integers a00, a01, a10 and a11, where axy is the number of subsequences of length 2 of the string s equal to the sequence {x,?y}.

In these problem you are given four integers a00, a01, a10, a11 and have to find any non-empty string s that matches them, or determine that there is no such string. One can prove that if at least one answer exists, there exists an answer of length no more than 1?000?000.

Input

The only line of the input contains four non-negative integers a00, a01, a10 and a11. Each of them doesn‘t exceed 109.

Output

If there exists a non-empty string that matches four integers from the input, print it in the only line of the output. Otherwise, print "Impossible". The length of your answer must not exceed 1?000?000.

Examples
Input
Copy
1 2 3 4
Output
Copy
Impossible
Input
Copy
1 2 2 1
Output
Copy
0110

 

 

首先从a00和a11可以求出0和1的数量;

假设目前为0000...001111..;

显然a01=num0*num1,a10=0;

那么我们移动一个1去左边,a10++,a01--;但总数还是不变;

那么合理的解必须是a10+a01=num0*num1;

值得注意的是:当00或11=0时,0或1可能有1个也可能没有;

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 1000005
#define inf 0x3f3f3f3f
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long  ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-3
typedef pair<int, int> pii;
#define pi acos(-1.0)
const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {
	ll x = 0;
	char c = getchar();
	bool f = false;
	while (!isdigit(c)) {
		if (c == ‘-‘) f = true;
		c = getchar();
	}
	while (isdigit(c)) {
		x = (x << 1) + (x << 3) + (c ^ 48);
		c = getchar();
	}
	return f ? -x : x;
}

ll gcd(ll a, ll b) {
	return b == 0 ? a : gcd(b, a%b);
}
ll sqr(ll x) { return x * x; }

/*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {
	if (!b) {
		x = 1; y = 0; return a;
	}
	ans = exgcd(b, a%b, x, y);
	ll t = x; x = y; y = t - a / b * y;
	return ans;
}
*/
int a00, a01, a10, a11;

int main()
{
	//ios::sync_with_stdio(0);
	rdint(a00); rdint(a01); rdint(a10); rdint(a11);
	int k = 1, r = 1;
	while (k*(k - 1) / 2 < a00)k++;
	while (r*(r - 1) / 2 < a11)r++;
//	cout << k << ‘ ‘ << r << endl;
	int fg = 1;
	if (k*(k - 1) / 2 != a00 || r * (r - 1) / 2 != a11) {
		cout << "Impossible" << endl; return 0;
	}
	
	else if (a00 == 0 && a11 == 0) {
		if (a01 == 0 && a10 == 0)cout << 0 << endl;
		else if (a01 == 0 && a10 == 1)cout << "10" << endl;
		else if (a01 == 1 && a10 == 0)cout << "01" << endl;
		else cout << "Impossible" << endl;
		return 0;
	}
	else if (a00 == 0) {
		if (a01 == 0 && a10 == 0) {
			while (r--)cout << ‘1‘;

		}
		else if (a01 + a10 == r) {
			while (a10--)cout << ‘1‘;
			cout << 0;
			while (a01--)cout << ‘1‘;
		}
		else fg = 0;
	}
	else if (a11 == 0) {
		if (a10 == 0 && a01 == 0) {
			while (k--)cout << ‘0‘;
		}
		else if (a10 + a01 == k) {
			while (a01--)cout << 0;
			cout << 1;
			while (a10--)cout << 0;
		}
		else fg = 0;
	}

	else {
		if (a01 + a10 == k * r) {
			while (a01) {
				while (r > a01) {
					cout << 1;
					r--;
				}
				cout << 0;
				k--; a01 -= r;
			}
			while (r--)cout << 1;
			while (k--)cout << 0;
		}
		else fg = 0;
	}
	if (fg == 0)cout << "Impossible" << endl;
	return 0;
}

 

CF708B Recover the String 构造

标签:map   space   its   style   vector   while   other   amp   names   

原文地址:https://www.cnblogs.com/zxyqzy/p/10127239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!