Official

A - 図書館の蔵書検索 / Library Book Search Editorial by physics0523


初心者の方へ


問題の要求を整理します。
許可証のうち、意味のあるものは最も許可レベルが高いものだけです。
すると、行うべきは以下の \(2\) ステップであることが分かります。

  1. 最も許可レベルの高い許可証の許可レベル \(X\) を求める。
  2. 難易度 \(X\) 以下の本の難易度の総和を求める。

1. について、各許可証の難易度を配列に保存し、それを適切に参照することで求めることができます。
2. については、 for 文と if 文の組み合わせで実現できます。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;
using ll=long long;

int main(){
  ll N,M,K;
  cin >> N >> M >> K;
  vector<ll> P(N),L(M),T(K);
  for(auto &nx : P){cin >> nx;}
  for(auto &nx : L){cin >> nx;}
  ll best=-1;
  for(auto &nx : T){
    cin >> nx;
    best=max(best,L[nx-1]);
  }
  ll res=0;
  for(auto &nx : P){
    if(nx<=best){res+=nx;}
  }
  cout << res << "\n";
  return 0;
}

posted:
last update: