2010年2月1日星期一.sgu152
sgu152:前兩天讀了半天題看不懂,今天看了半天別人的代碼發(fā)現(xiàn)是水題,
睡前寫完。
俄羅斯人寫的英語(yǔ)也很難理解嘛。。。
其實(shí)就是有幾個(gè)百分?jǐn)?shù),然后讓你分配他們呢的小數(shù)和,從而使他們的和是100
且得出數(shù)是原來(lái)百分?jǐn)?shù)的上取整或者下取整。
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.shnenglu.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