Official

B - まとめ買い割引 / Bulk Purchase Discount Editorial by physics0523 Editorial for printing


実は、商品を棚に戻す必要はありません。
定価 \(a\) 円の商品を戻した状態からその商品を加えることを考えたとき、どのような場合でも費用の増加は高々 \(a\) 円で済むので、別のスーパーで商品を買う意味はありません。

よって、全ての商品を買った場合に割引がどのティアに属するか判定し、割引後の金額を出力すればよいです。
最初から \(T_i\) の昇順に与えられるため、ティアの判定の際は \(i\) の降順に調べていくとよいです。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;
using ll=long long;

int main(){
  ll N,K;
  cin >> N >> K;
  vector<ll> T(K),P(K);
  for(ll i=0;i<K;i++){
    cin >> T[i] >> P[i];
  }
  ll s=0;
  for(ll i=0;i<N;i++){
    ll C;
    cin >> C;
    s+=C;
  }
  for(ll i=K-1;i>=0;i--){
    if(s>=T[i]){
      cout << s-((s*P[i])/100) << "\n";
      return 0;
    }
  }
  cout << s << "\n";
  return 0;
}

posted:
last update: