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;
而不是你标注的代码