Hoj 1604ケーブルマスター

1514 ワード

テーマリンク:http://acm.hit.edu.cn/hoj/problem/view?id=1604
本題は続けて2点練習する.
この問題はとても気持ちが悪くて、精度カードの、十分に人を煩わすことができて、WAはN回.
重要なところに注意すればいいです.%.nlfを使う時は四捨五入します.この時はむしろ手で計算するほうがいいです.
注意表示の二つのポイント:
上のコード:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;

long long array[10003];

int s = 10000;
int n,k;

bool cmp(long long a,long long b)
{
    return a>b;
}
int calc(long long m)
{
    int p = 0;
    for(int i=0;i<n;i++)
    {
        p += array[i]/m;
    }

    return p>=k;
}
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
#endif


    int l,r;
    int ans;
    double a;
    while(scanf("%d %d",&n,&k) == 2)
    {
        ans = 0;
        for(int i=0;i<n;i++)
        {
            scanf("%lf",&a);
            array[i]  = (a+1e-8) * s;//   
        }
        sort(array,array+n,cmp);
        l = s/100;
        r = array[0];
        while(l<=r)
        {
            long long m = (l + r)/2;
            if(calc(m)>0)
            {
                l = m+1;
                ans = m;
            }
            else
            {
                r = m-1;
            }
        }
        //   
        int th = ans/10000;
        int hu = (ans - th * 10000)/1000;
        int te = (ans - th * 10000 - hu * 1000)/100;
        printf("%d.%d%d
",th,hu,te); } return 0; }