제출 #441477

#제출 시각아이디문제언어결과실행 시간메모리
441477Haruto810198Alternating Current (BOI18_alternating)C++17
13 / 100
3080 ms4276 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long
#define double long double

#define FOR(i, l, r, d) for(int i=(l); i<=(r); i+=(d))
#define szof(x) ((int)(x).size())

#define vi vector<int>
#define pii pair<int,int>

#define F first
#define S second

#define pb push_back
#define eb emplace_back
#define mkp make_pair

const int INF = 2147483647;
const int LNF = INF*INF;
const int MOD = 1000000007;
const int mod = 998244353;

//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")

const int MAX = 100010;

int n, m;
int L[MAX], R[MAX];
int cnt1[MAX], cnt2[MAX];
int res[MAX];
bool solved;

void check(int mask){

    vi arr;
    FOR(i, 0, m-1, 1){
        if((mask & (1<<i)) != 0){
            arr.pb(1);
        }
        else{
            arr.pb(0);
        }
    }

    FOR(i, 1, n, 1){
        cnt1[i] = 0;
        cnt2[i] = 0;
    }

    FOR(i, 0, m-1, 1){

        if(arr[i]==1){

            if(L[i] <= R[i]){
                FOR(j, L[i], R[i], 1){
                    cnt1[j]++;
                }
            }
            else{
                FOR(j, L[i], n, 1){
                    cnt1[j]++;
                }
                FOR(j, 1, R[i], 1){
                    cnt1[j]++;
                }
            }

        }
        else{

            if(L[i] <= R[i]){
                FOR(j, L[i], R[i], 1){
                    cnt2[j]++;
                }
            }
            else{
                FOR(j, L[i], n, 1){
                    cnt2[j]++;
                }
                FOR(j, 1, R[i], 1){
                    cnt2[j]++;
                }
            }

        }

    }

    bool flag = 1;
    FOR(i, 1, n, 1){
        if(cnt1[i]==0 or cnt2[i]==0){
            flag = 0;
        }
    }

    if(flag){
        solved = 1;
        FOR(i, 0, m-1, 1){
            res[i] = arr[i];
        }
    }

}

signed main(){

    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n>>m;
    FOR(i, 0, m-1, 1){
        cin>>L[i]>>R[i];
    }

    solved = 0;
    FOR(mask, 0, (1<<m)-1, 1){
        check(mask);
    }

    if(solved){
        FOR(i, 0, m-1, 1){
            cout<<res[i];
        }
        cout<<'\n';
    }
    else{
        cout<<"impossible"<<'\n';
    }

    return 0;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...