求助大佬!80分,#2 #10 TLE!请各位大佬优化一下
查看原帖
求助大佬!80分,#2 #10 TLE!请各位大佬优化一下
719201
INT_1024楼主2023/3/22 20:25
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int People_Number,How_Round;
int What_People_Number;
struct Node_student{
	int My_Number=0;
	int Point_Value=0;
	int Strong_Numbers=0;
}cnt[200005];
bool cmp(Node_student num1,Node_student num2){
	if(num1.Point_Value==num2.Point_Value)
		return num1.My_Number<num2.My_Number;
	return num1.Point_Value>num2.Point_Value;
}
void print(){
	for(int i=1;i<=People_Number*2;i++)
		cout<<cnt[i].My_Number<<" "<<cnt[i].Point_Value<<endl;
	cout<<endl;
}
int main(){
    cin>>People_Number>>How_Round
	   >>What_People_Number;
	for(int i=1;i<=People_Number*2;i++){
		int num;cin>>num;
		cnt[i].My_Number=i;
		cnt[i].Point_Value=num;
	}
	for(int i=1;i<=People_Number*2;i++){
		int num;cin>>num;
		cnt[i].Strong_Numbers=num;
	}
	sort(cnt+1,cnt+People_Number*2+1,cmp);
	//print();
	while(How_Round--){
		vector<Node_student> win,lose;
		for(int i=1;i<=People_Number*2;i+=2){
			if(cnt[i].Strong_Numbers<cnt[i+1].Strong_Numbers){
				cnt[i+1].Point_Value++;
				win.push_back(cnt[i+1]);
				lose.push_back((cnt[i]));
			}
			else{
				cnt[i].Point_Value++;
				win.push_back(cnt[i]);
				lose.push_back((cnt[i+1]));
			}
		}
		//print()
		merge(win.begin(),win.end(),lose.begin(),lose.end(),cnt+1,cmp);
	}
	cout<<cnt[What_People_Number].My_Number;
	return 0; 
}
2023/3/22 20:25
加载中...