求助,用了归并30分
查看原帖
求助,用了归并30分
225807
bobo_code楼主2020/8/28 22:49
#include<iostream>
#include<algorithm>
using namespace std;
int n,r,q,tt,i;
struct player{
	int index,ex,score;
}p[200010];
player A[100001];
player B[100001];
bool cmp(player a,player b)
{
    if(a.score == b.score) return a.index<b.index;
    else return a.score>b.score;
}
void MSort()
{
    int i=1,j=1,k=1;
    while(i<=n && j<=n)
    {
        if(A[i].score > B[j].score || (A[i].score == B[j].score && A[i].index < B[j].index))
        {
            p[k].score = A[i].score;
            p[k].ex = A[i].ex;
            p[k++].index = A[i++].index;
        }
        else{
            p[k].score = B[j].score;
            p[k].ex = B[j].ex;
            p[k++].index = B[j++].index;
        }
    }
    while(i<=n)
    {
        p[k].score = A[i].score;
        p[k].ex = A[i].ex;
        p[k++].index = A[i++].index;
    }
    while(j<=n)
    {
        p[k].score = B[j].score;
        p[k].ex = B[j].ex;
        p[k++].index = B[j++].index;
    }
}
int main()
{
	cin>>n>>r>>q;
	for(i=1;i<=2*n;i++) cin>>p[i].score;
	for(i=1;i<=2*n;i++)
	{
		cin>>p[i].ex;
		p[i].index=i;
	}
	sort(p+1,p+1+2*n,cmp);
	while(r!=0)
	{
		r--;
		tt=1;
		for(i=1;i<=n;i++)
		{
			if(p[2*i-1].ex>p[2*i].ex)
			{
				A[tt].score=p[2*i-1].score+1;
				A[tt].index=p[2*i-1].index;
				A[tt].ex=p[2*i-1].ex;
				B[tt].score=p[2*i].score;
				B[tt].index=p[2*i].index;
				B[tt].ex=p[2*i].ex;
				tt++;
			}
			else
			{
				A[tt].score=p[2*i-1].score;
				A[tt].index=p[2*i-1].index;
				A[tt].ex=p[2*i-1].ex;
				B[tt].score=p[2*i].score+1;
				B[tt].index=p[2*i].index;
				B[tt].ex=p[2*i].ex;
				tt++;
			}
		}
		MSort();
		//for(i=1;i<=2*n;i++) cout<<p[i].score<<' ';
		//cout<<endl;
	}
	cout<<p[q].index;
	return 0;
} 
2020/8/28 22:49
加载中...