結果
| 問題 |
No.2479 Sum of Squares
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-09-22 21:26:08 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 722 bytes |
| コンパイル時間 | 4,990 ms |
| コンパイル使用メモリ | 171,400 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-08 12:07:00 |
| 合計ジャッジ時間 | 6,003 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 |
ソースコード
import std;
void main () {
long S = readln.chomp.to!long;
solve(S);
}
void solve (long S) {
long[] ans; ans.reserve(15);
while (0 < S) {
long A = findA(S);
S -= A;
ans ~= A;
}
// output
writeln(ans.length);
foreach (i, a; ans) {
write(a, (i == ans.length-1 ? '\n' : ' '));
}
}
/* return: S以下で最も近い平方数を返す。O(log(S)) */
long findA (long S) {
assert(1 <= S);
bool f (long x) {
return x*x <= S;
}
long ok = 1, ng = 2*10^^9;
while (1 < abs(ok-ng)) {
long mid = (ok+ng)/2;
if (f(mid)) {
ok = mid;
} else {
ng = mid;
}
}
return ok*ok;
}