蒟蒻0分求助
查看原帖
蒟蒻0分求助
869283
maojiahao楼主2023/1/30 11:28
#include<bits/stdc++.h>
using namespace std;
int n,k,q,s;
struct st{
	int num,grade,stength;
};
st a[444444],b[222222],c[222222];
int read(){
	int x=0;
	char s=getchar();
	while(s>'9'||s<'0')
	    s=getchar();
	while(s<='9'&&s>='0'){
		x=x*10+s-'0';
		s=getchar();
	}
	return x;
}
bool cmp(st a1,st a2){
	if(a1.grade!=a2.grade)
	    return a1.grade>a2.grade;
	else
	    return a1.num<a2.num;
}
void work() {
	int lb=0;
	int lc=0;
	int la=0;
	for(int i=1; i<n*2; i+=2) {
		if(a[i].stength>a[i+1].stength) {
			a[i].grade++;
			a[lb]=a[i];
			c[lc]=a[i];
		} else {
			a[i].grade++;
			b[lb]=a[i+1];
			c[lc]=a[i];
		}
	}
	lb=1;
	lc=1;
	la=1;
	while(lb<=n&&lc<=n) {
		if(cmp(b[lb],c[lc]))
			a[la++]=b[lb++];
		else
			a[la++]=c[lc++];
	}
	while(lb<=n)
		a[la++]=b[lb++];
	while(lc<=n)
		a[la++]=c[lc++];
}
int main() {
	n=read(),k=read(),q=read();
	for(int i=1;i<=n*2;i++)
	    a[i].num=i,a[i].grade=read();
	for(int i=1;i<=n*2;i++)
	    a[i].stength=read();
	sort(a+1,a+n*2+1,cmp);
	for(int i=1;i<=k;i++)
	    work();
	printf("%d",a[q].num+1);
	return 0;
}
2023/1/30 11:28
加载中...