Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define MAX 100005
- ll a, b, c, d;
- ll arr[MAX];
- bool check(ll n, ll m)
- {
- ll zo = n*m;
- ll oz = 0;
- if(zo+oz == b+c) return true;
- else return false;
- }
- string str(ll n, ll m)
- {
- ll zo = n*m;
- ll oz = 0;
- ll mov = zo-b;
- ll st = 0, mid = 0;
- while(mov != 0){
- if(mov < n){
- mid = n-mov;
- mov = 0;
- break;
- }
- else {
- mov -= n;
- st++;
- }
- }
- string s = "";
- if(mid == 0){
- for(ll i=0; i<st; i++){
- s += '1';
- }
- for(ll i=0; i<n; i++){
- s += '0';
- }
- for(ll i=0; i<m-st; i++){
- s += '1';
- }
- return s;
- }
- else {
- for(ll i=0; i<st; i++){
- s += '1';
- }
- for(ll i=0; i<mid; i++){
- s += '0';
- }
- s += '1';
- for(ll i=0; i<n-mid; i++){
- s += '0';
- }
- for(ll i=0; i<m-st-1; i++){
- s += '1';
- }
- return s;
- }
- }
- int main()
- {
- scanf("%lld %lld %lld %lld", &a, &b, &c, &d);
- for(ll i=0; i<MAX; i++){
- arr[i] = (i*(i-1))/2;
- }
- vector<ll> V1, V2;
- for(ll i=0; i<MAX; i++){
- if(arr[i] == a) V1.push_back(i);
- }
- for(ll i=0; i<MAX; i++){
- if(arr[i] == d) V2.push_back(i);
- }
- if(V1.size() == 0 || V2.size() == 0){
- cout << "impossible";
- return 0;
- }
- for(ll i=0; i<V1.size(); i++){
- for(ll j=0; j<V2.size(); j++){
- if(check(V1[i], V2[j])){
- string ans = str(V1[i], V2[j]);
- cout << ans;
- return 0;
- }
- }
- }
- cout << "impossible";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement