ABC209 B 解答
B - Can you buy them all?(13)
問題
問題文
高橋商店では N 個の商品が売られています。i (1 ≤ i ≤ N ) 番目の商品の定価は Ai円です。今日はセールが行われており、偶数番目の商品は定価の 1 円引きの値段で買うことができます。奇数番目の商品は定価で売られています。
あなたの所持金は X 円です。これら N 個の商品を全て買うことができますか?
制約
1 ≤ N ≤ 100
1 ≤ X ≤ 10000
1 ≤ Ai ≤ 100
入力は全て整数
考察
まずは制約に注目します。商品の個数 N は最大でも100までしかありません。ということで、商品を実際に一つずつ購入しても十分間に合いそうですね。
1つ目の商品から購入をしていき、所持金から商品の値段を引いていきます。また、偶数番目の商品の際には値段を1円引きしてあげます。
全ての商品を購入したのちに、所持金が0円以上であればズルせずに変えたということなので、"Yes"を出力します。0円でもOKです。もし、負の値でしたら万引きをしていることになりますので、"No"です。
また、「偶数番目の商品を1円引きする」のですが、for文を回していきますと、0番目からカウントが始まるのでその点に注意です。
実装
#include <bits/stdc++.h> #define rep(i,n) for(int i=0;i<n;++i) #define reps(i,s,n) for(int i=s;i<n;++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;
using T = tuple<int, int, int>;
int main()
{
int n, x;
cin >> n >> x;
rep(i, n)
{
int a; cin >> a;
if ((i + 1) % 2 == 0) --a;
x -= a;
}
if (x >= 0) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}
あとがき
計算をするだけなのですが、全部の個数を見積もるのが大切な問題でした。また、上記では触れなかったのですが、値段の値がint型の収まる範囲であるということも重要な点です。もし、数がとっても大きい(負の場合は非常に小さい)、場合にはlong long型を使う必要が出てきます。
やることはシンプルですが、実は色々なことをわかってますか?ということが問われてた問題である。と勝手に思っています。
この記事が気に入ったらサポートをしてみませんか?