結果
| 問題 | 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;
    
}
            
            
            
        