Submission #317933

#TimeUsernameProblemLanguageResultExecution timeMemory
317933ant101Archery (IOI09_archery)C++14
67 / 100
2045 ms8784 KiB
#include<iostream> #include<vector> #include<algorithm> #define ep emplace #define eb emplace_back #define fi first #define se second #define all(x) (x).begin(),(x).end() using namespace std; typedef long long ll; typedef pair<int,int>pi; typedef pair<ll,ll>pl; const int inf=1e9+7; const ll INF=1e18; bool chk[200010]; int pa[200010]; int n; int par(int x) { if(!chk[x]) return x; return pa[x]=par(pa[x]); } inline void put(int x) { chk[x]=1; pa[x]=x==1?n:x-1; return; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int r; cin>>n>>r; r=(r-n*2)%n+n*2; int s; cin>>s; if(s==1) return cout<<n<<endl,0; vector<int>p(n*2-1); for(int&t:p) cin>>t; if(n<=400) { int mx=inf,mi=-1; for(int i=n;i>0;i--) { vector<pi>v(n+1); for(int j=1;j<i;j++) v[j]=pi(p[j*2-2],p[j*2-1]); v[i]=pi(s,p[i*2-2]); for(int j=i;j++<n;) v[j]=pi(p[j*2-3],p[j*2-2]); for(int j=0;j<r;j++) { for(int k=1;k++<n;) if(v[k].fi<v[k].se) swap(v[k].fi,v[k].se); if(v[1].fi>v[1].se) swap(v[1].fi,v[1].se); for(int k=0;k<n;k++) v[k].se=v[k+1].se; v[n].se=v[0].se; } int id=-1; for(int j=0;j++<n;) if(v[j].fi==s||v[j].se==s) id=j; if(id<mx) mx=id,mi=i; } cout<<mi<<endl; return 0; } if(s<n+2) { if(n>13000) return cout<<n<<endl,0; int mx=inf,mi=-1; for(int i=n;i>max(0,n-350000000/n/n);i--) { vector<pi>v(n+1); for(int j=1;j<i;j++) v[j]=pi(p[j*2-2],p[j*2-1]); v[i]=pi(s,p[i*2-2]); for(int j=i;j++<n;) v[j]=pi(p[j*2-3],p[j*2-2]); for(int j=0;j<r;j++) { for(int k=1;k++<n;) if(v[k].fi<v[k].se) swap(v[k].fi,v[k].se); if(v[1].fi>v[1].se) swap(v[1].fi,v[1].se); for(int k=0;k<n;k++) v[k].se=v[k+1].se; v[n].se=v[0].se; } int id=-1; for(int j=0;j++<n;) if(v[j].fi==s||v[j].se==s) id=j; if(id<mx) mx=id,mi=i; } cout<<mi<<endl; return 0; } int mx=inf,mi=-1; int ps=-1; { int i=n; vector<pi>v(n+1); for(int j=1;j<i;j++) v[j]=pi(p[j*2-2],p[j*2-1]); v[i]=pi(s,p[i*2-2]); for(int j=i;j++<n;) v[j]=pi(p[j*2-3],p[j*2-2]); vector<int>pos(n*2+1); for(int j=0;j++<n;) pos[v[j].fi]=pos[v[j].se]=j; fill(chk,chk+n+1,0); if(s!=1) { put(pos[1]); for(int j=n*2;j>s;put(pos[j--])) pos[j]=par(pos[j]); pos[s]=par(pos[s]); } if(pos[s]<mx) mx=pos[s],mi=i; ps=1; while(chk[ps]) ps++; } for(int i=n;i>n-30;i--) { vector<pi>v(n+1); for(int j=1;j<i;j++) v[j]=pi(p[j*2-2],p[j*2-1]); v[i]=pi(s,p[i*2-2]); for(int j=i;j++<n;) v[j]=pi(p[j*2-3],p[j*2-2]); vector<int>pos(n*2+1); for(int j=0;j++<n;) pos[v[j].fi]=pos[v[j].se]=j; fill(chk,chk+n+1,0); if(s!=1) { put(pos[1]); for(int j=n*2;j>s;put(pos[j--])) pos[j]=par(pos[j]); pos[s]=par(pos[s]); } if(pos[s]<mx) mx=pos[s],mi=i; } for(int i=min(ps+5000000/n,n);i>max(ps-15000000/n,0);i--) { vector<pi>v(n+1); for(int j=1;j<i;j++) v[j]=pi(p[j*2-2],p[j*2-1]); v[i]=pi(s,p[i*2-2]); for(int j=i;j++<n;) v[j]=pi(p[j*2-3],p[j*2-2]); vector<int>pos(n*2+1); for(int j=0;j++<n;) pos[v[j].fi]=pos[v[j].se]=j; fill(chk,chk+n+1,0); if(s!=1) { put(pos[1]); for(int j=n*2;j>s;put(pos[j--])) pos[j]=par(pos[j]); pos[s]=par(pos[s]); } if(pos[s]<mx||i>mi) mx=pos[s],mi=i; } cout<<mi<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...