Submission #1259595

#TimeUsernameProblemLanguageResultExecution timeMemory
1259595user736482Alternating Current (BOI18_alternating)C++20
0 / 100
971 ms1114112 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pb push_back #define ff first #define ss second #define MOD 1000000007 #define INF 1000000019 #define POT (1<<20) #define INFL 1000000000000000099LL ll n,m,a,b,c; vector<pair<ll,ll>>kon[100007]; ll nxt[100007],pop[100007],co[100007]; vector<ll>v[100007]; void st(ll x,ll y){ co[x]=y; for(ll i : v[x])st(i,y^1); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>m; for(ll i=0;i<n;i++){ nxt[i]=(i+1)%n; pop[i]=(i+n-1)%n; } for(ll i=0;i<m;i++){ co[i]=-1; cin>>a>>b; a--; b%=n; if(b<=a)b+=n; kon[a].pb({b,i}); } ll akbst=0; ll kto=-1; bool bl=1; while(bl){ bl=0; for(ll i=0;i<n;i++){ //cout<<i<<" "<<flush; //for(ll j=0;j<n;j++){ // cout<<"\n"; // cout<<pop[j]<<" "<<nxt[j]<<" "; // for(auto k: kon[j])cout<<k.ff<<" "; // cout<<"\n"; //} //cout<<kon[i].size()<<" "; //cout<<"\n\n"; //cout<<flush; sort(kon[i].begin(),kon[i].end()); reverse(kon[i].begin(),kon[i].end()); vector<pair<ll,ll>>pom; bool bl2=0; for(auto j : kon[i]){ //cout<<akbst<<" "<<kto<<" "<<j.ff<<" "<<j.ss<<"\n"; if(j.ff<=akbst){ //cout<<j.ff<<" "<<akbst<<flush; bl=1; // co[j.ss]=kto; v[kto].pb(j.ss); ll idx=nxt[i]; if(j.ff%n==i){ for(ll i=0;i<m;i++){ if(co[i]==-1)st(i,1); } for(ll i=0;i<m;i++)cout<<co[i]; return 0; } ll x=0; while(idx>i ^ j.ff%n>=i ^ j.ff%n>=idx){ x++; // if(x==2137)return 0; // cout<<idx<<" "; for(auto k : kon[idx])pom.pb(k); kon[idx].clear(); nxt[pop[idx]]=nxt[idx]; pop[nxt[idx]]=pop[idx]; idx=nxt[idx]; } } else{ bl2=1; kto=j.ss; akbst=j.ff; } } if(kon[i].size()){ kon[i]={kon[i][0]}; if(bl2==0)kon[i].pop_back(); } for(auto k : pom)kon[i].pb(k); if(pom.size()){ i--; continue; } } akbst-=n; } //cout<<"\n\n\n"; for(ll i=0;i<n;i++){ // cout<<i<<": "; // for(auto j : kon[i])cout<<j.ff<<" "; // cout<<"\n"<<flush; } ll idx=0; for(idx;kon[idx].empty();idx++); ll ak=idx; while(1){ //cout<<ak<<" "<<kon[ak][0].ss<<" "<<flush; ll zas=kon[ak][0].ff; st(kon[ak][0].ss,0); kon[ak].clear(); if(zas-n>=idx)break; ll i; for(i=zas;i>ak;i--){ if(kon[i%n].size())break; } if(i==ak){ cout<<"impossible";return 0; } ak=i; } idx=0; bl=0; for(ll i=0;i<n;i++)bl|=(bool)(kon[i].size()); if(bl==0){ cout<<"impossible";return 0; } for(idx;kon[idx].empty();idx++); ak=idx; while(1){ ll zas=kon[ak][0].ff; st(kon[ak][0].ss,1); kon[ak].clear(); if(zas-n>=idx)break; ll i; for(i=zas;i>ak;i--){ if(kon[i%n].size())break; } if(i==ak){ cout<<"impossible";return 0; } ak=i; } for(ll i=0;i<n;i++){ if(kon[i].size())st(kon[i][0].ss,0); } for(ll i=0;i<m;i++)cout<<co[i]; }
#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...