不懂错因,跪求dalao

回复帖子

@JackLiang 2018-01-12 23:31 回复
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a,b,c,d,e,f,g;
ll s;
struct tennis
{
    int fen,bianhao,power;
}u[200010],win[100010],lose[100010];
bool cmp(tennis m,tennis n)
{
    if(m.fen==n.fen)return m.bianhao<n.bianhao;
    return m.fen>n.fen;
}
int main()
{
    scanf("%d%d%d",&a,&b,&c);
    for(int i=1;i<=2*a;i++)
    {
        u[i].bianhao=i;
        scanf("%d",&u[i].fen);
    }
    for(int i=1;i<=2*a;i++)scanf("%d",&u[i].power);
    sort(u+1,u+1+2*a,cmp);
    for(int i=0;i<b;i++)
    {
        f=0;g=0;
        for(int j=1;j<=2*a;j+=2)
        {
            if(u[j].fen>u[j+1].fen)win[++f]=u[j],lose[++g]=u[j+1],win[f].fen++;
            else win[++f]=u[j+1],lose[++g]=u[j],win[f].fen++;
        }
        merge(win+1,win+1+f,lose+1,lose+1+g,u+1,cmp);
    }
    printf("%d",u[c].bianhao);
    return 0;
}
@zhouwc 2018-01-13 10:48 回复

整体思路是用归并的思想。一开始排一次序就行