답안 #984535

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
984535 2024-05-16T18:23:14 Z Ahmed57 Alternating Current (BOI18_alternating) C++17
0 / 100
3000 ms 9820 KB
#include <bits/stdc++.h>

using namespace std;
#define int long long

signed main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    int n,m;cin>>n>>m;
    int pref[n+2] = {0};
    vector<array<int,3>> v;
    vector<array<int,2>> rng[n+1];
    int dir[n+1] = {0};
    for(int i = 0;i<m;i++){
        int a,b;cin>>a>>b;
        if(a<=b){
            pref[a]++;
            pref[b+1]--;
        }else{
            pref[a]++;
            pref[1]++;
            pref[b+1]--;
            b+=n;
        }
        v.push_back({a,b,i});
        rng[a].push_back({b,i});
    }    
    for(int i = 2;i<=n;i++){
        pref[i]+=pref[i-1];
    }
    for(int i = 1;i<=n;i++){
        if(pref[i]<=1){
            cout<<"impossible\n";
            return 0;
        }
    }
    for(int i = m-1;i>=0;i--){
        for(int j = 0;j<m;j++)dir[j] = 0;
        int ind = v[i][0];
        int nah = v[i][1], fe = v[i][2];
        bool bad = 0;
        while(ind<v[i][0]+n){
            if(nah==ind){
                bad = 1;
                break;
            }
            if(nah==-1){
                bad = 1;
                break;
            }
            int er = nah;
            dir[fe] = 1;
            if(er>=v[i][0]+n){
                break;
            }
            while(ind<=er){
                ind++;
                for(auto j:rng[(ind-1)%n+1]){
                    if(nah<(j[0]>n?j[0]:(ind<=n?j[0]:j[0]+n))){
                        nah = (j[0]>n?j[0]:(ind<=n?j[0]:j[0]+n));
                        fe = j[1];
                    }
                }
                if(ind<=er&&pref[(ind-1)%n+1]==2)nah = -1;
            }
        }
        int npref[n+2];
        for(int j = 1;j<=n;j++){
            npref[j] = 0;
        }
        for(int j = 0;j<m;j++){
            if(dir[j])continue;
            if(v[j][1]>n){
                npref[v[j][0]]++;
                npref[1]++;
                npref[(v[j][1]-1)%n+2]--;
            }else{
                npref[v[j][0]]++;
                npref[v[j][1]+1]--;
            }
        }
        for(int j = 2;j<=n;j++)npref[j]+=npref[j-1];
        for(int j = 1;j<=n;j++){
            if(npref[j]==0){
                bad = 1;
                break;
            }
        }
        if(bad==0){
            for(int j = 0;j<m;j++){
                cout<<dir[j];
            }
            return 0;
        }
    }
    cout<<"impossible\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Execution timed out 3081 ms 348 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Execution timed out 3081 ms 348 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Execution timed out 3081 ms 348 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 9820 KB Output is correct
2 Correct 4 ms 4956 KB Output is correct
3 Correct 10 ms 7088 KB Output is correct
4 Execution timed out 3068 ms 7696 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Execution timed out 3081 ms 348 KB Time limit exceeded
10 Halted 0 ms 0 KB -