https://vjudge.net/problem/UVA-10026
对于两个二元组(Ti,Si),(Tj,Sj), 当先执行i时耗费的价值是Ti*Sj,反之则是Tj*Si, 显然如果想要第一种情况更优得话,要满足Ti*Sj<Tj*Si, 按照这个直接排序就好了,因为要求字典序最小所以当二者等价时序号小的优先。
1 #include<bits/stdc++.h> 2 using namespace std; 3 struct node{int t,s,id;}P[1005]; 4 bool cmp(node A,node B) 5 { 6 if(A.t*B.s==A.s*B.t){ 7 return A.id<B.id; 8 } 9 else{ 10 return A.t*B.s<A.s*B.t; 11 } 12 } 13 int main() 14 { 15 int T,N,M,i,j,k; 16 cin>>T; 17 for(int xx=1;xx<=T;++xx) 18 { 19 if(xx>1) puts(""); 20 cin>>N; 21 for(i=1;i<=N;++i) 22 { 23 P[i].id=i; 24 cin>>P[i].t>>P[i].s; 25 } 26 sort(P+1,P+1+N,cmp); 27 for(i=1;i<=N;++i) 28 { 29 if(i>1) printf(" "); 30 cout<<P[i].id; 31 } 32 puts(""); 33 } 34 return 0; 35 }
时间: 2024-10-17 13:59:42