正文

Zju 2109 FatMouse' Trade2006-08-10 01:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/17429.html

分享到:

2012463 2006-08-10 00:50:36 Accepted 2109 C++ 00:00.17 408K St.Crux 菜题。最简单的排序+贪婪就可以过。但是有一些陷阱。 是贡献了三次wa。我居然把忘了把调试部分注释掉—_— #include <cstdio> int n, m, a[1000], b[1000];double r[1000]; void pt(){ for(int i = 0; i < m; i ++) {  printf("%d %d %0.3f\n", a[i], b[i], r[i]); }} int main(){ //freopen("in.txt", "r", stdin); while(scanf("%d %d", &n, &m) && n != -1) {  int i, k, j;  for(i = 0; i < m; i ++)  {   scanf("%d %d", &a[i], &b[i]);   if(b[i] == 0) r[i] = 99999999;   else     r[i] = double(a[i]) / double(b[i]);  }  //select sort  for(i = 0; i < m - 1; i ++)  {   double mx = r[i]; j = i;   for(k = i + 1; k < m; k ++)   {    if(r[k] > mx)    {     j = k;     mx = r[k];    }   }   int ai = a[i], bi = b[i]; double rd = r[i];   a[i] = a[j], b[i] = b[j]; r[i] = r[j];   a[j] = ai, b[j] = bi; r[j] = rd;  }  //pt();  double sum = 0; int si = n;  for(i = 0; i < m; i ++)  {   if(si >= b[i])   {    si -= b[i];    sum += double(a[i]);   }   else   {        sum += r[i] * double(si);    si = 0;   }   if(si == 0)    break;  }  printf("%0.3f\n", sum); } return 0;}    

阅读(3907) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册