Official

B - Keep the Change Editorial by Nyaan


それぞれの店で「お釣りを受け取った場合に比べて何円損したか」を計算してみましょう。
\(S_i=\) take の場合、どちらの場合でもお釣りを受け取っているので、損した金額は \(0\) 円です。
\(S_i=\) keep の場合、実際はお釣りを受け取っていないのでお釣りの分だけ損をしています。商品の価格が \(A_i\) 円で払った金額が \(B_i\) 円なのでお釣りは \(B_i-A_i\) 円となるため、損した金額は \(B_i-A_i\) 円です。
よって、答えは

  • \(S_i=\) keep である店について \(B_i - A_i\) を合計した値

となります。これは入力を適切に受け取って if 文を用いることで計算可能です。計算量は \(\mathrm{O}(N)\) で十分高速です。

  • 実装例 (C++)
#include <iostream>
#include <vector>
using namespace std;

int main() {
  int N;
  cin >> N;
  int ans = 0;
  for (int i = 0; i < N; i++) {
    int A, B;
    cin >> A >> B;
    string S;
    cin >> S;
    if (S == "keep") ans += B - A;
  }
  cout << ans << "\n";
}

posted:
last update: