题目链接 http://acm.hust.edu.cn/vjudge/problem/21234
解题思路
因为越晚完成,惩罚的天数越多。所以可以以 罚金/完成所需天数 从大到小排序
代码
#include<stdio.h> #include<string.h> //#define LOCAL #define MAX_LEN 1005 struct Node { double t, f; int num; double a; }task[MAX_LEN]; int n; void Solve() { for(int i=1; i<n; i++) for(int j=0; j<n-i; j++) { if(task[j].a<task[j+1].a) { Node temp; temp = task[j]; task[j] = task[j+1]; task[j+1] = temp; } } for(int i=0; i<n-1; i++) printf("%d ", task[i].num); printf("%d", task[n-1].num); printf("\n"); } int main() { #ifdef LOCAL freopen("data.txt", "r", stdin); freopen("ans.txt", "w", stdout); #endif int cases; scanf("%d", &cases); while(cases--) { scanf("%d", &n); for(int i=0; i<n; i++) { scanf("%lf%lf", &task[i].t, &task[i].f); task[i].num = i+1; task[i].a=task[i].f/task[i].t; } Solve(); if(cases) printf("\n"); } return 0; }