标签:
题目:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 52127 Accepted Submission(s):
17505
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 5 const int maxN = 1000 + 5; 6 7 struct warehouse{ 8 int J; 9 int F; 10 double scale; 11 }House[maxN]; 12 13 bool cmp(const struct warehouse a, const struct warehouse b) { 14 return a.scale > b.scale; 15 } 16 17 int main() { 18 int M, N; 19 double ans; 20 while(scanf("%d %d", &M, &N) == 2){ 21 if(M == -1 && N == -1) break; 22 //输入 23 for(int i = 0; i < N; i++) { 24 scanf("%d %d", &House[i].J, &House[i].F); 25 House[i].scale = (double)House[i].J/House[i].F; 26 } 27 //将所有屋子中的猫粮与Java豆兑换的比例排序 28 sort(House, House + N, cmp); 29 // for(int i = 0; i < N; i++) 30 // printf("%.3lf\t", House[i].scale); 31 //按比例从大到小分配猫粮 32 ans = 0.0; 33 int pos = 0; 34 while(M > 0 && N > 0){//猫粮换完,或者Java豆已经没有时应该终止循环 35 if(M > House[pos].F) 36 ans += House[pos].J; //若猫粮充足,直接将屋子的Java豆兑换下来 37 else 38 ans += (double)House[pos].J * M / House[pos].F; //能兑换的猫粮不足,这时应该按比例来兑换Java豆 39 M -= House[pos].F; 40 N--; 41 pos++;//到下一家 42 } 43 //输出 44 printf("%.3lf\n", ans); 45 } 46 return 0; 47 }
2015-07-02文
标签:
原文地址:http://www.cnblogs.com/hello-worlds/p/4615755.html