結果

問題 No.634 硬貨の枚数1
ユーザー @abcde@abcde
提出日時 2019-05-11 12:36:19
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 5 ms / 2,000 ms
コード長 1,605 bytes
コンパイル時間 1,781 ms
コンパイル使用メモリ 171,164 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-09-14 18:07:08
合計ジャッジ時間 4,412 ms
ジャッジサーバーID
(参考情報)
judge15 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 4 ms
4,376 KB
testcase_01 AC 4 ms
4,380 KB
testcase_02 AC 3 ms
4,376 KB
testcase_03 AC 3 ms
4,376 KB
testcase_04 AC 4 ms
4,380 KB
testcase_05 AC 2 ms
4,380 KB
testcase_06 AC 2 ms
4,376 KB
testcase_07 AC 2 ms
4,376 KB
testcase_08 AC 4 ms
4,376 KB
testcase_09 AC 2 ms
4,376 KB
testcase_10 AC 2 ms
4,376 KB
testcase_11 AC 4 ms
4,376 KB
testcase_12 AC 2 ms
4,380 KB
testcase_13 AC 4 ms
4,376 KB
testcase_14 AC 4 ms
4,376 KB
testcase_15 AC 4 ms
4,380 KB
testcase_16 AC 4 ms
4,376 KB
testcase_17 AC 4 ms
4,380 KB
testcase_18 AC 4 ms
4,376 KB
testcase_19 AC 2 ms
4,380 KB
testcase_20 AC 3 ms
4,380 KB
testcase_21 AC 4 ms
4,376 KB
testcase_22 AC 4 ms
4,380 KB
testcase_23 AC 4 ms
4,384 KB
testcase_24 AC 4 ms
4,376 KB
testcase_25 AC 4 ms
4,380 KB
testcase_26 AC 4 ms
4,376 KB
testcase_27 AC 4 ms
4,376 KB
testcase_28 AC 4 ms
4,376 KB
testcase_29 AC 4 ms
4,380 KB
testcase_30 AC 4 ms
4,376 KB
testcase_31 AC 4 ms
4,376 KB
testcase_32 AC 4 ms
4,380 KB
testcase_33 AC 4 ms
4,376 KB
testcase_34 AC 4 ms
4,380 KB
testcase_35 AC 4 ms
4,376 KB
testcase_36 AC 4 ms
4,376 KB
testcase_37 AC 5 ms
4,376 KB
testcase_38 AC 4 ms
4,376 KB
testcase_39 AC 4 ms
4,380 KB
testcase_40 AC 4 ms
4,376 KB
testcase_41 AC 4 ms
4,376 KB
testcase_42 AC 4 ms
4,380 KB
testcase_43 AC 4 ms
4,376 KB
testcase_44 AC 3 ms
4,380 KB
testcase_45 AC 4 ms
4,380 KB
testcase_46 AC 2 ms
4,376 KB
testcase_47 AC 3 ms
4,380 KB
testcase_48 AC 4 ms
4,376 KB
testcase_49 AC 3 ms
4,376 KB
testcase_50 AC 4 ms
4,376 KB
testcase_51 AC 4 ms
4,380 KB
testcase_52 AC 2 ms
4,376 KB
testcase_53 AC 3 ms
4,376 KB
testcase_54 AC 4 ms
4,376 KB
testcase_55 AC 4 ms
4,384 KB
testcase_56 AC 4 ms
4,376 KB
testcase_57 AC 4 ms
4,376 KB
testcase_58 AC 4 ms
4,376 KB
testcase_59 AC 4 ms
4,380 KB
testcase_60 AC 5 ms
4,376 KB
testcase_61 AC 4 ms
4,376 KB
testcase_62 AC 4 ms
4,376 KB
testcase_63 AC 4 ms
4,380 KB
testcase_64 AC 4 ms
4,376 KB
testcase_65 AC 4 ms
4,376 KB
testcase_66 AC 4 ms
4,376 KB
testcase_67 AC 4 ms
4,376 KB
testcase_68 AC 4 ms
4,376 KB
testcase_69 AC 4 ms
4,380 KB
testcase_70 AC 4 ms
4,376 KB
testcase_71 AC 4 ms
4,380 KB
testcase_72 AC 4 ms
4,376 KB
testcase_73 AC 4 ms
4,376 KB
testcase_74 AC 4 ms
4,376 KB
testcase_75 AC 4 ms
4,376 KB
testcase_76 AC 4 ms
4,376 KB
testcase_77 AC 3 ms
4,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const LL LIMIT = 4500;  // 上限を, 4500 * 4501 / 2 = 10127250 に 変更.

int main() {
    
    // 1. 入力情報取得.
    LL N;
    cin >> N;
    
    // 2. 硬貨準備.
    map<LL, LL> m;
    for(int i = 0; i < LIMIT; i++){
        LL c = (i + 1) * (i + 2) / 2;
        m[c]++;
    }
    // for(auto &p : m) cout << p.first << endl;
    
    // 3. 支払う硬貨をカウント.
    // i円以下の最小支払い回数を計算していく.
    // -> 10000まで調べると, 1 or 2 or 3 のいずれかだった.
    // なので, 以下のようにロジック変更.
    // ① map に ある … 1回.
    // ② map を巡回しペアが見つかった … 2回.
    // ③ 上記以外 … 3回.
    
    // 3-1. 条件③ を 設定.
    int ans = 3;
    
    // 3-2. 条件② の チェック.
    for(auto &p : m){
        LL a = p.first;
        LL b = N - a;
        // ex.
        // N = 10001    ならば, 3回. (4[ms])
        // N = 10000000 ならば, a=1719585 b=8280415 の 2回. (5[ms])
        // 
        // ex.
        // N = 8
        // -> 2回???
        // -> WA(6 + 1 + 1 の 3枚が最小).
        // -> a=5 b=3 の 謎出力 が 見つかった(a=5 は, map の要素でない筈).
        // if(m[b] > 0){
        if(m[a] > 0 && m[b] > 0){
            // cout << "a=" << a << " b=" << b << endl;
            ans = 2;
            break;
        }
    }
    
    // 3-3. 条件① の チェック.
    if(m[N] > 0) ans = 1;
    
    // 4. 出力.
    cout << ans << endl;
    return 0;
    
}
0