直接用double也是过不了的,这题对精度要求很高。
你可以将不等式进行交叉相乘,化简,就可以过了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct node{
long long int a,b,c;
int place;
}nb[1005];
bool cmp(const node &a,const node &b){
if(a.c*(b.a+b.b)!=b.c*(a.a+a.b))
return a.c*(b.a+b.b)>b.c*(a.a+a.b);
else
return a.place<b.place;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int i;
for(i=0;i<n;i++){
scanf("%lld %lld %lld",&nb[i].a,&nb[i].b,&nb[i].c);
nb[i].place=i+1;
}
sort(nb,nb+n,cmp);
for(i=0;i<n-1;i++){
printf("%d ",nb[i].place);
}
printf("%d\n",nb[i].place);
}
return 0;
}