萌新求助大佬,为什么以下标注的代码换到下面去就不能AC了???????

P1093 [NOIP2007 普及组] 奖学金

HITACorz @ 2019-10-19 11:18:09

以下标注的代码放到函数的第三行就会有一个数据点WA,如果放到第一行的话那就全部AC,errrrr……有点不明白这种情况,求解

#include<iostream>
#include<algorithm>
using namespace std;
struct stu{
    int chese,math,eng;
    int number,sum;
}peo[320];

bool cmp2(stu a,stu b)
{
    if(a.sum==b.sum&&a.chese==b.chese)  return a.number<b.number;//就是这一行把这个换到第三个if的话有个数据点会WA,为什么呢?
    if(a.sum!=b.sum)    return a.sum>b.sum;
    if(a.sum==b.sum)    return a.chese>b.chese;

}

int main()
{
    int n;
    int i,j;
    int temp;
    int num=1;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>peo[i].chese>>peo[i].math>>peo[i].eng;
        peo[i].number=i;
        peo[i].sum=peo[i].chese+peo[i].math+peo[i].eng;
    }
    sort(peo+1,peo+n+1,cmp2);

    for(i=1;i<=5;i++)
    {
        cout<<peo[i].number<<" "<<peo[i].sum<<endl;
    }
    return 0;
 } 

by PluviaLaver @ 2019-10-19 11:32:41

emmmmm。。。。。。 我是个蒟蒻别问我 你这边的 if(a.sum==b.sum) return a.chese>b.chese; 和if(a.sum==b.sum&&a.chese==b.chese) return a.number<b.number; 有一个条件重复了,如果你把标注的代码放在后面的话,程序会先执行 if(a.sum==b.sum) return a.chese>b.chese; 而不是你标注的代码


|