Official
B - 穴の開いた硬貨 / Perforated Coin Editorial by KoD
\(i\) 番目の客にはお釣りとして \(B_i - A_i\) 円支払います。これを硬貨の枚数が最小になるように支払うためには、額の大きい硬貨から順に使えるだけ使っていくのが最適です。たとえば、お釣りとして \(417\) 円支払うとき、\(100\) 円玉を \(4\) 枚、\(10\) 円玉を \(1\) 枚、\(5\) 円玉を \(1\) 枚、\(1\) 円玉 \(2\) 枚使うのが最適です。
上記の事実から、お釣りに使う硬貨を決定することができるので、使用する \(5\) 円玉および \(50\) 円玉の枚数を求めることができます。
実装例 (C++) :
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
int ans = 0;
while (N--) {
int a, b;
cin >> a >> b;
int x = b - a;
for (int y : {500, 100, 50, 10, 5, 1}) {
if (y == 50 or y == 5) {
ans += x / y;
}
x %= y;
}
}
cout << ans << '\n';
}
posted:
last update: