转化一下就好啦,交叉相乘相互约掉一些相同的计算。

#include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
using namespace std;

struct T{
  long long a,b,c;
  int ind;
}t[100010];

bool cmp(T x,T y){
   long long l=x.a*y.c+x.b*y.c;
   long long r=y.a*x.c+y.b*x.c;
  if(l==r) return x.ind<y.ind;
  return l<r;
}

int main(){
  int n;
  while(scanf("%d",&n)!=EOF){
    for(int i=1;i<=n;i++){
        cin>>t[i].a>>t[i].b>>t[i].c;
        t[i].ind=i;
    }
    sort(t+1,t+1+n,cmp);
    for(int i=1;i<=n;i++){
        if(i!=1) printf(" ");
        cout<<t[i].ind;
    }
    cout<<endl;
  }
  return 0;
}