Please sign in first.
Official
A - 図書館の蔵書検索 / Library Book Search Editorial
by
A - 図書館の蔵書検索 / Library Book Search Editorial
by
physics0523
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
問題の要求を整理します。
許可証のうち、意味のあるものは最も許可レベルが高いものだけです。
すると、行うべきは以下の \(2\) ステップであることが分かります。
- 最も許可レベルの高い許可証の許可レベル \(X\) を求める。
- 難易度 \(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:
