Why so serious? --[NKU]schindlerlee

2010年2月1日星期一.sgu152 贪心

2010年2月1日星期一.sgu152
sgu152:前两天读了半天题看不懂,今天看了半天别人的代码发现是水题,
  睡前写完。
俄罗斯人写的英语也很难理解嘛。。。

其实就是有几个百分数,然后让你分配他们呢的小数和,从而使他们的和是100
且得出数是原来百分数的上取整或者下取整。


 1 
 2 const double eps = 1e-9;
 3 const int N = 10100;
 4 double sum;
 5 double b[N];
 6 int a[N],vote[N],n,isInt[N],fac;
 7 int dcmp(double x) { return (x > eps) - (x < -eps);}
 8 int main()
 9 {//http://www.cppblog.com/schindlerlee
10   int i,j,k;
11   scanf("%d",&n);
12   for (i = 0;i < n;i++) {
13       scanf("%d",vote + i), sum += vote[i];
14   }
15 
16   for (i = 0;i < n;i++) {
17       b[i] = 100 * vote[i] / sum;
18       a[i] = (int)b[i];
19       if (dcmp(a[i] - b[i]) == 0) {
20           isInt[i] = true;
21       }
22   }
23   fac = 100;
24   for (i = 0;i < n;i++) { fac -= a[i]; }
25   for (i = 0;i < n;i++) {
26       if (fac && !isInt[i]) {
27           printf("%d ",a[i] + 1), fac--;
28       }else {
29           printf("%d ",a[i]);
30       }
31   }
32   printf("\n");
33   return 0;
34 }
35 

posted on 2010-02-01 00:50 schindlerlee 阅读(1363) 评论(0)  编辑 收藏 引用 所属分类: 解题报告


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理