見出し画像

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型を使う必要が出てきます。

やることはシンプルですが、実は色々なことをわかってますか?ということが問われてた問題である。と勝手に思っています。


この記事が気に入ったらサポートをしてみませんか?