結果
| 問題 |
No.68 よくある棒を切る問題 (2)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-02-16 17:25:16 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 753 bytes |
| コンパイル時間 | 2,930 ms |
| コンパイル使用メモリ | 160,988 KB |
| 実行使用メモリ | 21,956 KB |
| 最終ジャッジ日時 | 2024-06-12 07:05:10 |
| 合計ジャッジ時間 | 11,888 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 1 TLE * 1 -- * 8 |
ソースコード
import std.algorithm, std.conv, std.range, std.stdio, std.string;
import std.math; // math functions
const real mi = 1e-6;
const real eps = 1e-10;
void main()
{
auto n = readln.chomp.to!size_t;
auto li = readln.split.to!(real[]);
auto q = readln.chomp.to!size_t;
auto ki = readln.split.to!(size_t[]);
struct LN { real l; size_t n; }
size_t[real] buf;
auto calc(real m) {
if (m in buf) return LN(m, buf[m]);
auto n = size_t(0);
foreach (l; li)
n += (l / m).floor.to!size_t;
buf[m] = n;
return LN(m, n);
}
auto rng = iota(mi, li[0] + eps, eps).retro.map!(a => calc(a)).assumeSorted!"a.n < b.n";
foreach (k; ki) {
auto r = rng.upperBound(LN(0, k - 1));
writefln("%.10f", r.front.l);
}
}