记录编号 |
34038 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2011]瑞士轮 |
最终得分 |
100 |
用户昵称 |
QhelDIV |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.630 s |
提交时间 |
2011-11-26 22:31:13 |
内存使用 |
10.14 MiB |
显示代码纯文本
- #include <fstream>
- #include <cstdlib>
- using namespace std;
- ifstream fin("swiss.in");
- ofstream fout("swiss.out");
-
- int N,R,Q;
-
- class Competitor
- {
- public:
- int Score,Name,Energy;
- }Single[200001],A1[200001],A2[200001];
- int L1,L2;
- int Compare(const void *p,const void *q)
- {
- Competitor *p1=(Competitor *)p;
- Competitor *p2=(Competitor *)q;
- if(p1->Score == p2->Score)
- {
- if(p1->Name > p2->Name)
- return 1;
- else
- return -1;
- }
- else
- return p2->Score - p1->Score;
- }
-
- int main()
- {
- int i,j,k;
- fin>>N>>R>>Q;
- N*=2;
- for(i=1;i<=N;i++)
- {
- fin>>Single[i].Score;
- Single[i].Name=i;
- }
- for(i=1;i<=N;i++)
- fin>>Single[i].Energy;
- qsort(Single+1,N,sizeof(Competitor),Compare);
- int p1,p2,L,p;
- for(i=1;i<=R;i++)
- {
- L1=0;L2=0;
- int Ti=N/2;
- for(j=1;j<=N;j++)
- {
- A1[j].Score=0;
- A2[j].Score=0;
- }
- for(j=1;j<=Ti;j++)
- {
- k=j<<1;
- if(Single[k].Energy > Single[k-1].Energy)
- {
- Single[k].Score++;
- A1[++L1]=Single[k];
- A2[++L2]=Single[k-1];
- }
- else
- {
- Single[k-1].Score++;
- A1[++L1]=Single[k-1];
- A2[++L2]=Single[k];
- }
- }
- p1=1;p2=1;L=L1;
- int q=0;
-
- for(j=1;j<N;j++)
- {
- if(A1[p1].Score > A2[p2].Score)
- Single[++q]=A1[p1++];
- else
- {
- if(A1[p1].Score < A2[p2].Score)
- Single[++q]=A2[p2++];
- else
- {
- if(A1[p1].Name > A2[p2].Name)
- Single[++q]=A2[p2++];
- else
- Single[++q]=A1[p1++];
- }
- }
-
- if(p1 > L1)
- {
- int d=p2;
- for(j=L1+1;j<=N;j++)
- Single[++q]=A2[d++];
- break;
- }
- if(p2 > L2)
- {
- int d=p1;
- for(j=L2+1;j<=N;j++)
- Single[++q]=A1[d++];
- break;
- }
- }
- }
-
- qsort(Single+1,N,sizeof(Competitor),Compare);
-
- fout<<Single[Q].Name;
-
- fin.close();
- fout.close();
- return 0;
- }