結果
| 問題 |
No.67 よくある棒を切る問題 (1)
|
| コンテスト | |
| ユーザー |
Ktakuya
|
| 提出日時 | 2018-07-07 20:22:42 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,086 bytes |
| コンパイル時間 | 503 ms |
| コンパイル使用メモリ | 64,368 KB |
| 実行使用メモリ | 13,340 KB |
| 最終ジャッジ日時 | 2025-03-03 11:17:56 |
| 合計ジャッジ時間 | 13,335 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | TLE * 1 -- * 29 |
ソースコード
#include <iostream>
#include <iomanip>
typedef long long int Int;
const Int MAX_INT = 1000000000;
const double EPS = 1e-9;
Int min(Int L[], Int N) {
Int min_val = MAX_INT;
for (Int i=0; i<N; i++) {
if (min_val > L[i]) min_val = L[i];
}
return min_val;
}
Int sum(Int L[], Int N) {
Int sum_val = 0;
for (Int i=0; i<N; i++) sum_val += L[i];
return sum_val;
}
bool retrievable(double x, Int L[], Int N, Int K) {
Int max_num = 0;
for (Int i=0; i<N; i++) {
max_num += (Int)(L[i] / x);
}
return max_num >= K;
}
double find(double a, double b, Int L[], Int N, Int K) {
if (b - a < EPS) {
return a;
} else {
double c = (a + b) / 2;
if (retrievable(c, L, N, K)) {
return find(c, b, L, N, K);
} else {
return find(a, c, L, N, K);
}
}
}
int main() {
Int N;
std::cin >> N;
Int L[N];
for (Int i=0; i<N; i++)
std::cin >> L[i];
Int K;
std::cin >> K;
double a = (double)min(L, N) / (double)K;
double b = (double)sum(L, N) / (K-0.5);
std::cout << std::fixed;
std::cout << std::setprecision(9)
<< find(a, b, L, N, K) << std::endl;
return 0;
}
Ktakuya