记录编号 | 194269 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [NOIP 2011]瑞士轮 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.972 s | ||
提交时间 | 2015-10-16 11:29:05 | 内存使用 | 2.60 MiB | ||
#include<cstdio> #include<iostream> #include<algorithm> #include<deque> using namespace std; const int SIZEN=200010; int N,R,Q,id[SIZEN],S[SIZEN],P[SIZEN]; deque<int> A,B; void read() { scanf("%d%d%d",&N,&R,&Q); for(int i=1;i<=2*N;i++) scanf("%d",&S[i]); for(int i=1;i<=2*N;i++) scanf("%d",&P[i]); for(int i=1;i<=2*N;i++) id[i]=i; } bool cmp(int a,int b) { if(S[a]==S[b]) return a<b; return S[a]>S[b]; } void work() { sort(id+1,id+2*N+1,cmp); for(int i=1;i<=R;i++) { for(int j=1;j<=2*N;j+=2) { if(P[id[j]]>P[id[j+1]]) {S[id[j]]++;A.push_back(id[j]);B.push_back(id[j+1]);} else {S[id[j+1]]++;A.push_back(id[j+1]);B.push_back(id[j]);} } int tem=0; while(!A.empty()&&!B.empty()) { if(cmp(A.front(),B.front())) {id[++tem]=A.front();A.pop_front();} else {id[++tem]=B.front();B.pop_front();} } while(!A.empty()) {id[++tem]=A.front();A.pop_front();} while(!B.empty()) {id[++tem]=B.front();B.pop_front();} } printf("%d",id[Q]); } int main() { freopen("swiss.in","r",stdin); freopen("swiss.out","w",stdout); read(); work(); return 0; }