Hoj 1604ケーブルマスター
1514 ワード
テーマリンク:http://acm.hit.edu.cn/hoj/problem/view?id=1604
本題は続けて2点練習する.
この問題はとても気持ちが悪くて、精度カードの、十分に人を煩わすことができて、WAはN回.
重要なところに注意すればいいです.%.nlfを使う時は四捨五入します.この時はむしろ手で計算するほうがいいです.
注意表示の二つのポイント:
上のコード:
本題は続けて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;
}