輸入的r表示進行多少輪,最終求出第q名是哪個隊,有2n個隊
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
const int N = 100005;
struct P
{
int num;
int weight;
int sum;
}data[2*N],temp[2*N];
int win[N],lose[N];
bool cmp(P a,P b)
{
if(a.sum>b.sum)
return true;
else if(a.sum==b.sum)
return a.num<b.num;
else
return false;
}
int main()
{
int n=0,r=0,q=0;
freopen("hao.in","r",stdin);
cin>>n>>r>>q;
for(int i=1;i<=2*n;i++){
scanf("%d",&data[i].sum);
data[i].num=i;
}
for(int i=1;i<=2*n;i++)
scanf("%d",&data[i].weight);
sort(data+1,data+n+n+1,cmp);
for(int i=1;i<=r;i++){
int l1=1,l2=1;
for(int j=1;j<=n*2;j+=2)
{
if(data[j].weight>data[j+1].weight)
{
data[j].sum+=3;
win[l1++]=j;
lose[l2++]=j+1;
}
else
{
data[j+1].sum+=3;
win[l1++]=j+1;
lose[l2++]=j;
}
}
int l=1,r=1,t=0;
while(l<l1&&r<l2)
{
if(data[win[l]].sum>data[lose[r]].sum)
{
temp[++t].sum=data[win[l]].sum;
temp[t].num=data[win[l]].num;
temp[t].weight=data[win[l]].weight;
l++;
}
else if(data[win[l]].sum==data[lose[r]].sum)
{
if(data[win[l]].num<data[lose[r]].num)
{
temp[++t].sum=data[win[l]].sum;
temp[t].num=data[win[l]].num;
temp[t].weight=data[win[l]].weight;
l++;
}
else
{
temp[++t].sum=data[lose[r]].sum;
temp[t].num=data[lose[r]].num;
temp[t].weight=data[lose[r]].weight;
r++;
}
}
else
{
temp[++t].sum=data[lose[r]].sum;
temp[t].num=data[lose[r]].num;
temp[t].weight=data[lose[r]].weight;
r++;
}
}
while(l<l1)
{
temp[++t].sum=data[win[l]].sum;
temp[t].num=data[win[l]].num;
temp[t].weight=data[win[l]].weight;
l++;
}
while(r<l2)
{
temp[++t].sum=data[lose[r]].sum;
temp[t].num=data[lose[r]].num;
temp[t].weight=data[lose[r]].weight;
r++;
}
for(int k=1;k<=t;k++)
{
data[k].sum=temp[k].sum;
data[k].num=temp[k].num;
data[k].weight=temp[k].weight;
}
}
cout<<data[q].num;
return 0;
}