社区讨论
过样例但是30分,已注释求debug!
B3968[GESP202403 五级] 成绩排序参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lzh62jun
- 此快照首次捕获于
- 2024/08/05 23:49 2 年前
- 此快照最后确认于
- 2024/08/06 09:27 2 年前
CPP
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int n;
struct node{
int c,m,e,sum,rk,num;
}a[105];
inline bool cmp(node x,node y)
{
if(x.sum!=y.sum) return x.sum>y.sum;
if(x.c+x.m!=y.c+y.m) return x.c+x.m>y.c+y.m;
if(max(x.c,x.m)!=max(y.c,y.m)) return max(x.c,x.m)>max(y.c,y.m);
}//排名排序
inline bool cmp2(node x,node y)
{
return x.num<y.num;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
a[i].num=i;//存编号
cin>>a[i].c>>a[i].m>>a[i].e;
a[i].sum=a[i].c+a[i].m+a[i].e;//存总分
}
sort(a+1,a+1+n,cmp);//按成绩好的排序
a[1].rk=1;//第一名的rank为1
int num=1;//每个人的最高排名
for(int i=2;i<=n;i++)//i是每个人的最低排名
{
if(a[i].sum==a[i-1].sum && a[i].c+a[i].m==a[i-1].c+a[i-1].m && max(a[i].c,a[i].m)==max(a[i-1].c,a[i-1].m))//满足名次相同的条件
a[i].rk=num;//实际rank为最高排名
else
{
num=i;//更新下一轮的最高排名
a[i].rk=num;
}
}
sort(a+1,a+1+n,cmp2);//重新按照编号排序
for(int i=1;i<=n;i++) cout<<a[i].rk<<endl;//按顺序输出每人rank
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...