这是一道排序加优化的题目和瑞士轮有点像
看了题目发现,每次输的人每两个人的绝对位置都是一样的
每次赢得的人每两个人的绝对位置也都是一样的,所以可以根据这条发现的规律进行优化
#include<bits/stdc++.h>
using namespace std;
struct node
{
int cs;
int s;
int h;
}a[650000];
bool cmp(node x,node y)
{
if(x.cs==y.cs)return x.h<y.h;
return x.cs>y.cs;
}
int main()
{
int n;cin>>n;n*=2;
for(int i=1;i<=n;i++)cin>>a[i].cs,a[i].h=i;
for(int i=1;i<=n;i++)cin>>a[i].s;
int m;cin>>m;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j+=2)
{
int tmp;
if(a[j].s>a[j+1].s)a[j].cs++,tmp=j;
else a[j+1].cs++,tmp=j+1;
while(tmp>1&&(a[tmp].cs>a[tmp-1].cs||(a[tmp].cs==a[tmp-1].cs&&a[tmp].h<a[tmp-1].h)))//循环优化
{
swap(a[tmp],a[tmp-1]);
tmp--;
}
}
}
for(int i=1;i<=n;i++)
{if(a[i].h==1){cout<<i<<' '<<a[i].cs;return 0;}}
}