公式
B - 入団オーディション / Audition for Admission 解説
by
B - 入団オーディション / Audition for Admission 解説
by
physics0523
ソートに頼らない解法を説明します。
まず、候補者の得点を受け取ります。その後、辞退者の得点を \(-1\) 点であるとします。(この処理は配列を活用すると実現可能です。)
そして、人 \(2\) 以降で人 \(1\) より得点の高い人数に \(1\) を加えたものを \(rk\) とします。
このとき、 \(rk\) は高橋君の合格の優先順位となり、 \(rk \le K\) であるとき、またその時に限り高橋君は合格します。
本解法の時間計算量は \(O(N)\) です。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
int main(){
int N,K,M;
cin >> N >> K >> M;
vector<int> S(N+1);
for(int i=1;i<=N;i++){cin >> S[i];}
for(int i=0;i<M;i++){
int D;
cin >> D;
S[D]=-1;
}
int rk=1;
for(int i=2;i<=N;i++){
if(S[1]<S[i]){rk++;}
}
if(rk<=K){cout << "Yes\n";}
else{cout << "No\n";}
return 0;
}
投稿日時:
最終更新:
