社区讨论

30分求调

B3968[GESP202403 五级] 成绩排序参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m3b06d8h
此快照首次捕获于
2024/11/10 10:56
去年
此快照最后确认于
2024/11/10 13:13
去年
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct student
{
	int chn=0,mah=0,eng=0,sum=0,num=0;
	int pm=0;
	bool iscp=0;
};
bool cmp1(student a,student b)
{
	if(a.sum!=b.sum)
		return a.sum>b.sum;
	else if((a.mah+a.chn)!=(b.mah+b.chn))
		return (a.mah+a.chn)>(b.mah+b.chn);
	else if(max(a.mah,a.chn)!=max(b.mah,b.chn))
		return max(a.mah,a.chn)>max(b.mah,b.chn);
	else
	{
		if(a.num<b.num)
			b.iscp=1;
		else
			a.iscp=1;
		return a.num<b.num;
	}
}
bool cmp2(student a,student b)
{
	return a.num<b.num;
}
main()
{
	student stu[200005];
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>stu[i].chn>>stu[i].mah>>stu[i].eng;
		stu[i].sum=stu[i].chn+stu[i].mah+stu[i].eng;
		stu[i].num=i;
	}
	sort(stu+1,stu+1+n,cmp1);
	for(int i=1;i<=n;i++)
	{
		if(stu[i].pm) continue;
		else
		{
			stu[i].pm=i;
			int cur=1;
			while(stu[i+cur].iscp)
			{
				stu[i+cur].pm=stu[i].pm;
				cur++;
			}
		}
	}
	sort(stu+1,stu+1+n,cmp2);
	for(int i=1;i<=n;i++)
		cout<<stu[i].pm<<"\n";
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...