求助,开O2还是TLE2个

P1309 [NOIP2011 普及组] 瑞士轮

```cpp #include<bits/stdc++.h> using namespace std; const int N = 2e5+10; struct pl{ int score ,power,id; }; bool cmp(const pl &a,const pl &b){ if(a.score != b.score) return a.score > b.score; return a.id < b.id; } pl arr[N],win[N/2],lose[N/2]; int main() { int n,r,p; cin >> n >> r >> p; for(int i = 1;i <= 2*n;++i) cin >> arr[i].score; for(int i = 1;i <= 2*n;++i) { cin >> arr[i].power; arr[i].id = i; } sort(arr + 1,arr + 2*n+1,cmp); while(r--) { int pos = 1; for(int i = 1;i <= 2*n;i+=2){ if(arr[i].power > arr[i+1].power){ arr[i].score++; win[pos] = arr[i]; lose[pos] = arr[i+1]; pos++; } else{ arr[i+1].score++; win[pos] = arr[i+1]; lose[pos] = arr[i]; pos++; } } int l =1,r=1,k=1; while(l <= n&& r <= n){ if(cmp(win[l],lose[r])) arr[k++] = win[l++]; else arr[k++] = lose[r++]; } while(l <= n) arr[k++]= win[l++]; while(r <= n) arr[k++]= lose[r++]; } cout <<arr[p].id << endl; return 0; } ```
by jasonxue2012 @ 2023-09-05 23:13:11


|