結果
問題 | No.71 そろばん |
ユーザー |
![]() |
提出日時 | 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;}