40pts求调(悬关)

P1309 [NOIP2011 普及组] 瑞士轮

补充:#1,#3,#6,#7 AC,其余WA
by jmsyang0808 @ 2024-01-16 15:12:26


@[jmsyang0808](/user/1202695) 应该是排序的问题,如果改成sort就只是TLE了[记录](https://www.luogu.com.cn/record/143022695)
by I_am_losser @ 2024-01-16 15:48:57


@[jmsyang0808](/user/1202695) 你可以尝试一下使用归并排序,对于这题的归并排序它只需要三个栈,给你贴一下代码: ```cpp #include<bits/stdc++.h> using namespace std; long long n,r,q; struct v{ int s,w,id; }a[10000000],al[10000000],aw[10000000]; bool cmp(v x,v y){ if(x.s==y.s)return x.id<y.id; return x.s>y.s; } int main(){ cin>>n>>r>>q; n*=2; for(int i=1;i<=n;i++){ cin>>a[i].s; a[i].id=i; } for(int i=1;i<=n;i++)cin>>a[i].w; sort(a+1,a+n+1,cmp); while(r--){ for(int i=1,j=1;i<n;i+=2,j++){ if(a[i].w>a[i+1].w||a[i].w==a[i+1].w&&a[i].id<a[i+1].id){ a[i].s++; al[j]=a[i+1]; aw[j]=a[i]; } else{ a[i+1].s++; al[j]=a[i]; aw[j]=a[i+1]; } } for(int i=1,j=1,k=1;k<=n;k++){ if(i>n/2){ for(;k<=n;k++,j++)a[k]=al[j]; break; } if(j>n/2){ for(;k<=n;k++,i++)a[k]=aw[i]; break; } if(aw[i].s>al[j].s||aw[i].s==al[j].s&&aw[i].id<al[j].id){ a[k]=aw[i]; i++; } else{ a[k]=al[j]; j++; } } } cout<<a[q].id; return 0; } ``` 以及[AC记录](https://www.luogu.com.cn/record/127414345)
by I_am_jocker @ 2024-01-16 15:52:19


@ I_am_losser ,You know,宁wa不t
by jmsyang0808 @ 2024-01-16 15:53:06


@[I_am_jocker](/user/1059074) ,万分感谢,AC了。会关。
by jmsyang0808 @ 2024-01-17 15:31:50


|