社区讨论
30pts求调!
B3968[GESP202403 五级] 成绩排序参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lwf201u4
- 此快照首次捕获于
- 2024/05/20 22:20 2 年前
- 此快照最后确认于
- 2024/05/21 14:15 2 年前
小学生写的烂代码,不喜勿喷,如果看不懂写得什么可以看注释
CPP#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,v=1;//v记录目前并列的名次
struct pm{
ll c,m,e,cm,maxcm,zf;
}a[100005],b[100005];
bool cmp(pm x,pm y){
if(x.zf!=y.zf)return x.zf>y.zf;
else if(x.cm!=y.cm)return x.cm>y.cm;
else if(x.maxcm!=y.maxcm)return x.maxcm>y.maxcm;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].c>>a[i].m>>a[i].e;
b[i].c=a[i].c,b[i].m=a[i].m,b[i].e=a[i].e;//把a数组拷贝到b数组中
a[i].cm=a[i].c+a[i].m;//算语文和数学的总和
a[i].maxcm=max(a[i].c,a[i].m);//算语文和数学的较大值
a[i].zf=a[i].c+a[i].m+a[i].e;//算总分
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
ll pm,maxx,maxl,maxm;
for(int j=1;j<=n;j++)
if(b[i].c==a[j].c&&b[i].m==a[j].m&&b[i].e==a[j].e)
pm=j,maxx=a[j].maxcm,maxl=a[j].zf,maxm=a[j].cm;
/*如果从已排序序列找到了和未排序序列当前值完全一样的值,
那么就记录它在已排序序列中的排名(pm)*/
if(a[v].maxcm==maxx&&a[v].cm==maxm&&a[v].zf==maxl)pm=v;
//如果目前值符合并列条件,则排名变为并列名次
else v=pm;//否则并列名次更新为当前值的名次
cout<<pm<<endl;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...