結果

問題 No.2681 ゲームセンターの両替
ユーザー yansi819yansi819
提出日時 2024-03-23 10:29:50
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 23 ms / 2,000 ms
コード長 2,317 bytes
コンパイル時間 5,428 ms
コンパイル使用メモリ 262,036 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-04-15 10:14:04
合計ジャッジ時間 5,975 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 3 ms
6,812 KB
testcase_01 AC 2 ms
6,816 KB
testcase_02 AC 2 ms
6,944 KB
testcase_03 AC 2 ms
6,944 KB
testcase_04 AC 12 ms
6,944 KB
testcase_05 AC 2 ms
6,940 KB
testcase_06 AC 14 ms
6,940 KB
testcase_07 AC 5 ms
6,944 KB
testcase_08 AC 13 ms
6,940 KB
testcase_09 AC 10 ms
6,940 KB
testcase_10 AC 2 ms
6,940 KB
testcase_11 AC 10 ms
6,940 KB
testcase_12 AC 2 ms
6,940 KB
testcase_13 AC 2 ms
6,944 KB
testcase_14 AC 2 ms
6,940 KB
testcase_15 AC 2 ms
6,940 KB
testcase_16 AC 2 ms
6,940 KB
testcase_17 AC 2 ms
6,940 KB
testcase_18 AC 2 ms
6,944 KB
testcase_19 AC 2 ms
6,940 KB
testcase_20 AC 2 ms
6,944 KB
testcase_21 AC 2 ms
6,944 KB
testcase_22 AC 23 ms
6,944 KB
testcase_23 AC 2 ms
6,944 KB
testcase_24 AC 2 ms
6,940 KB
testcase_25 AC 2 ms
6,940 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
using ld = long double;

int C, Y, X;
int tsuka[10] = {10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1};
map<int, int> mp;

int main() {
  cin >> C >> Y;
  for (int i = 0; i < 10; i++) {
    mp[tsuka[i]] = Y / tsuka[i];
    Y %= tsuka[i];
  }
  if (mp[100] >= C) {
    cout << "no exchange" << endl;
    return 0;
  }
  for (auto p: mp) {
    X += p.first / 100 * p.second;
  }
  if (X < C) {
    cout << "can't exchange" << endl;
    return 0;
  }
  X = mp[100];
  while (mp[500] > 0 || X < C) {
    mp[500]--;
    X += 5;
  }
  if (X >= C) {
    cout << X << endl;
    return 0;
  }
  while (mp[1000] > 0 || X < C) {
    mp[1000]--;
    if (X + 5 >= C) X += 5;
    else X += 10;
  }
  if (X >= C) {
    cout << X << endl;
    return 0;
  }
  while (mp[2000] > 0 || X < C) {
    mp[2000]--;
    if (X + 5 >= C) X += 5;
    else if (X + 10 >= C) X += 10;
    else if (X + 15 >= C) X += 15;
    else X += 20;
  }
  if (X >= C) {
    cout << X << endl;
    return 0;
  }
  while (mp[5000] > 0 || X < C) {
    mp[5000]--;
    if (X + 5 >= C) X += 5;
    else if (X + 10 >= C) X += 10;
    else if (X + 15 >= C) X += 15;
    else if (X + 20 >= C) X += 20;
    else if (X + 25 >= C) X += 25;
    else if (X + 30 >= C) X += 30;
    else if (X + 35 >= C) X += 35;
    else if (X + 40 >= C) X += 40;
    else if (X + 45 >= C) X += 45;
    else X += 50;
  }
  if (X >= C) {
    cout << X << endl;
    return 0;
  }
  while (mp[10000] > 0) {
    mp[10000]--;
    if (X + 5 >= C) X += 5;
    else if (X + 10 >= C) X += 10;
    else if (X + 15 >= C) X += 15;
    else if (X + 20 >= C) X += 20;
    else if (X + 25 >= C) X += 25;
    else if (X + 30 >= C) X += 30;
    else if (X + 35 >= C) X += 35;
    else if (X + 40 >= C) X += 40;
    else if (X + 45 >= C) X += 45;
    else if (X + 50 >= C) X += 50;
    else if (X + 55 >= C) X += 55;
    else if (X + 60 >= C) X += 60;
    else if (X + 65 >= C) X += 65;
    else if (X + 70 >= C) X += 70;
    else if (X + 75 >= C) X += 75;
    else if (X + 80 >= C) X += 80;
    else if (X + 85 >= C) X += 85;
    else if (X + 90 >= C) X += 90;
    else if (X + 95 >= C) X += 95;
    else X += 100;
  }
  if (X >= C) {
    cout << X << endl;
    return 0;
  }

  return 0;
}
0