Submission #1014477

#TimeUsernameProblemLanguageResultExecution timeMemory
1014477bachhoangxuanArchery (IOI09_archery)C++17
100 / 100
765 ms18516 KiB
#include<bits/stdc++.h> using namespace std; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int n,R;cin >> n >> R;R=R%n+2*n; vector<int> b(2*n),a(2*n); vector<vector<int>> cnt(n,vector<int>(3,0)); for(int i=0;i<2*n;i++) cin >> b[i]; int s=b[0]; auto g = [&](int x){ return (x>s)+(x>=s); }; auto f = [&](){ if(s==1) return 0; cnt.assign(n,vector<int>(3,0)); if(s>n+1){ int pos=0; for(int i=0;i<n;i++){ cnt[i][0]=(a[i]>s)+(a[n+i]>s); cnt[i][1]=(a[i]==s || a[n+i]==s); } int x=0,y=0,rt=0; for(int it=0;it<3;it++){ int i=0; do{ auto &d=cnt[i]; x+=d[0];y+=d[1]; if(x+y>1){ if(i){ d[0]=1; d[1]=0; x--; } else{ if(y>0){ d[1]=1; d[0]=0; y--; } else{ d[1]=0; d[0]=1; x--; } } } else{ if(i){ d[0]=x,d[1]=y; x=y=0; } else{ if(y>0) rt++; d[0]=d[1]=0; } } i=(i+n-1)%n; }while(i!=0); } for(int i=0;i<n;i++) if(cnt[i][1]) return i-rt*n; } else{ for(int i=0;i<n;i++) cnt[i][g(a[i])]++,cnt[i][g(a[n+i])]++; int x=0,rt=0; while(!cnt[0][x]) x++; cnt[0][x]--; vector<int> num(3,0); for(int i=1;i<=3*n;i++){ for(int j=0;j<3;j++) num[j]+=cnt[(i-1)%n][j],cnt[(i-1)%n][j]=0; int y=0; while(!num[y]) y++; num[y]--; if(x>y) swap(x,y); cnt[(i-1)%n][y]++; if(y==1){ rt++; if(i>2*n){ if(R<i) rt--; return (n-1-R+i)%n-rt*n; } } } } assert(false); return -1; }; auto get = [&](int x){ vector<int> c=b; rotate(c.begin(),c.begin()+1,c.begin()+2*x+1); for(int i=0;i<n;i++) a[i]=c[i<<1],a[n+i]=c[i<<1|1]; return f(); }; int cc=get(n-1),l=0,r=n-1; while(l<r){ int m=(l+r)>>1; if(get(m)>=cc-(cc%n+n)%n) r=m; else l=m+1; } int val=get(l); l=0,r=n-1; while(l<r){ int m=(l+r+1)>>1; if(get(m)<=val) l=m; else r=m-1; } cout << l+1 << '\n'; }

Compilation message (stderr)

archery.cpp: In lambda function:
archery.cpp:21:17: warning: unused variable 'pos' [-Wunused-variable]
   21 |             int pos=0;
      |                 ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...