説明
ワンダーランドの居住者は、地域のプログラミングコンテストを主催することを決定しました。審判委員会は完全に任意であり、歴史上最も公正な試合を組織することを約束します。彼らは、スター型トポロジーでプレーヤーのコンピューターを接続することに決めました。つまり、プレーヤーをすべて単一の中央サーバーに接続することにしました。この完全に公正なゲームを編成するために、審判委員会の委員長は、すべてのプレーヤーのコンピューターをサーバーの周囲に等距離に配置することを提案しました。
ネットワークケーブルを購入するために、審判委員会はローカルネットワークソリューションプロバイダーに連絡し、一定数の同じ長さのネットワークケーブルを提供するように求めました。審判委員会は、ネットワークケーブルが長いほど良いことを望み、プレーヤー間の距離を可能な限り遠ざけることができます。
同社のネットワークケーブル管理者がこの仕事を引き受けました。彼は在庫内の各ワイヤーの長さ(センチメートルに正確)を知っており、ワイヤーの長さ(センチメートルに正確)を伝えさえすれば、ワイヤーの切断を完了することができます。ただし、今回は必要なネットワークケーブルの長さが不明であるため、ネットワークケーブルマネージャーが失われました。
ネットワークケーブルのスーパーバイザが最長のネットワークケーブル長を決定し、指定された数のネットワークケーブルを取得できるように、この長さに従ってネットワークケーブルの在庫をカットするプログラムを作成する必要があります。
入力
最初の行には、1つのスペースで区切られた2つの整数NおよびKが含まれています。N(1 <= N <= 10000)はインベントリ内のネットワークケーブルの数であり、K(1 <= K <= 10000)は必要なネットワークケーブルの数です。
次のN行(各行の番号)は、インベントリ内の各ネットワークケーブルの長さです(単位:メートル)。すべてのネットワークケーブルの長さは1m以上、100km以下です。入力の長さはすべてセンチメートルまで正確です。つまり、小数点以下2桁まで保持されます。
出力
ネットワークケーブルスーパーバイザーは、在庫のネットワークケーブルから、指定された数のネットワークケーブル(単位:メートル)の最大長を切り取ることができます。センチメートルまで正確でなければなりません。つまり、小数点第2位まで保持されます。
指定された数のネットワークケーブルを1cm以上の長さで入手できない場合は、 "0.00"(引用符なし)を出力する必要があります。
入力例
4 11
8.02
7.43
4.57
5.39
出力例
2.00
#include <iostream>
using namespace std;
int sz[10010];
int l = 0, r = 1E7, n, k;
int main() {
double temp;
scanf("%d %d", &n, &k);
for (int i = 0; i < n; ++i) {
scanf("%lf", &temp);
sz[i] = temp * 100;
// printf("%d",sz[i]);
}
while (l < r) {
int mid = (l + r + 1) / 2;
int num = 0;
for (int i = 0; i < n; ++i) {
num += sz[i] / mid;
}
if (num >= k) {
l = mid;
} else {
r = mid - 1;
}
}
printf("%.2lf", l / 100.0);
}