思路:
这题精度要求好高,double挂掉,long long扑街,无奈一直WA,贼难受…
- int : -2,147,483,648~2,147,483,647
10位
- long long:-9223372036854775808~9,223,372,036,854,775,807
19位
代码:
转化一下就好啦,交叉相乘相互约掉一些相同的计算。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int Max_n=1100;
int n;
struct Node{
ll a,b,c;
int pos;
bool operator<(const Node& n)const{
ll x=n.c*(a+b);
ll y=c*(n.a+n.b);
if(x!=y)return x<y;
return pos<n.pos;
}
}node[Max_n];
int main()
{
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
scanf("%lld%lld%lld",&node[i].a,&node[i].b,&node[i].c);
node[i].pos=i+1;
}
sort(node,node+n);
printf("%d",node[0].pos);
for(int i=1;i<n;i++){
printf(" %d",node[i].pos);
}
printf("\n");
}
return 0;
}