結果
| 問題 |
No.71 そろばん
|
| コンテスト | |
| ユーザー |
@abcde
|
| 提出日時 | 2019-06-01 17:33:41 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,037 bytes |
| コンパイル時間 | 1,481 ms |
| コンパイル使用メモリ | 164,432 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-17 19:57:09 |
| 合計ジャッジ時間 | 2,211 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main() {
// 1. 入力情報取得.
LL N;
scanf("%llu", &N);
// 2. そろばんの一列分で表現できる最大の数は?
// k = 1 -> 1
// k = 2 -> 3
// k = 3 -> 5
// ...
// k = N -> 上部 に i個, 下部に (N - i)個 あったとすると,
// (N - i + 1) * i + (N - i) = ((i + 1) * N - i * i) 個
// ↓
// N = 2 * X の 場合: i = X で 最大値 (X + 1) * 2 * X - X * X = X * X + 2 * X
// N = 2 * X + 1 の 場合:
// i = X で 最大値 (X + 1) * (2 * X + 1) - X * X = X * X + 3 * X + 1
// i = X + 1 で 最大値 (X + 2) * (2 * X + 1) - (X + 1) * (X + 1) = X * X + 3 * X + 1
// と分かる.
LL ans = 0;
LL X = N / 2;
if(N % 2 == 0) ans = X * X + 2 * X;
else ans = X * X + 3 * X + 1;
// 3. 出力 ~ 後処理.
// ex.
// 123456789
// -> 3810394811004419 で, OK?.
printf("%llu\n", ans);
return 0;
}
@abcde