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