Official

B - モンスター討伐 / Monster Slaying Editorial by kyopro_friends


この問題はスタックを用いた実装の練習問題です。ですがこの問題にはより簡単な解法が存在します。

高橋君の初期攻撃力は \(0\) であるため、初期状態では強さが \(0\) のモンスターしか倒すことができません。そのようなモンスターを倒しても高橋くんの強さは増加しないため、結局高橋君が倒すことができるのは、強さが \(0\) のモンスター全てのみです。

よって、 \(D_i=0\) であるような \(i\) についての \(V_i\) の合計が答えとなります。計算量は \(O(N)\) です。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;

  long long ans = 0;
  for(int i=0; i<n; i++){
    int d, v;
    cin >> d >> v;
    if(d == 0){
      ans += v;
    }
  }

  cout << ans << endl;
}

実装例 (Python)

N = int(input())

ans = 0
for _ in range(N):
  D, V = map(int, input().split())
  if D == 0:
    ans += V

print(ans)

posted:
last update: