听取WA声一片

P1093 [NOIP2007 普及组] 奖学金

hzy_Q @ 2024-01-17 19:47:01

50分求大佬帮助!!

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int id,yw,sx,yy,zf;
}a[10005];
bool cmp(node x,node y)
{
    if(x.zf!=y.zf) return x.zf>y.zf;
    if(x.yw!=y.yw) return x.zf>y.zf;
    if(x.id!=y.id) return x.zf<y.zf;
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        a[i].id=i;
        cin>>a[i].yw>>a[i].sx>>a[i].yy;
        a[i].zf=a[i].yw+a[i].sx+a[i].yy;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=5;i++)
    {
        cout<<a[i].id<<" "<<a[i].zf<<endl;
    }
    return 0;
}

by UKE_bound @ 2024-01-23 10:11:53

对不起我帮不了你

但我可以个你这个AC代码

#include<bits/stdc++.h>
using namespace std;
struct s{
    int y,sum,id;
}ss[305];
istream& operator>>(istream& in,s& a){
    int s,e;
    cin>>a.y>>s>>e;
    a.sum=a.y+s+e;
    return in;
}
ostream& operator<<(ostream& out,const s& a){
    out<<a.id<<' '<<a.sum;
    return out;
}
bool cmp(const s& a,const s& b){
    if(a.sum==b.sum){
        if(a.y==b.y){
            return a.id<b.id;
        }else{
            return a.y>b.y;
        }
    }
    return a.sum>b.sum;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>ss[i];
        ss[i].id=i+1;
    }
    sort(ss,ss+n,cmp);
    for(int i=0;i<5;i++){
        cout<<ss[i]<<endl;
    }
    return 0;
}

by UKE_bound @ 2024-01-23 10:12:41

但愿对你有帮助


by LoTLaneyyat @ 2024-01-23 20:21:32

@hzy_Q

为啥要有三个条件在cmp里,你这样不就乱了吗?

骗你的。

刚看第一眼没啥问题。

第二眼有点不对。

第三眼直接爆炸。

其实问题出在了cmp里面,我们在排序时应该是在总分相同时在比较题目要求的各科成绩,所以要先排总分,在比较单科。

ac代码:

#include<bits/stdc++.h>
using namespace std;
struct stu
{
    int num;
    int c,m,e; 
    int sum;
}student[310];
bool cmp(stu a,stu b)//好好看看这里,你的问题就在这
{
    if(a.sum>b.sum) return 1;
    else if(a.sum<b.sum) return 0;
    else
    {
        if(a.c>b.c) return 1;
        else if(a.c<b.c) return 0;
        else
        {
            if(a.num>b.num) return 0;
            else return 1;
        }
    }
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        student[i].num=i;
        cin>>student[i].c>>student[i].m>>student[i].e;
        student[i].sum=student[i].c+student[i].m+student[i].e;
    }
    sort(student+1,student+1+n,cmp);
    for(int i=1;i<=5;i++)
        cout<<student[i].num<<' '<<student[i].sum<<endl;
    return 0;
}

by hzy_Q @ 2024-01-24 08:09:07

感谢大佬们!!!!!!


|