Official

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


初心者の方へ


問題の要求を整理します。
許可証のうち、意味のあるものは最も許可レベルが高いものだけです。
すると、行うべきは以下の \(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: