转化一下就好啦,交叉相乘相互约掉一些相同的计算。
#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; }