AtCoder Beginner Contest 252 B - Takahashi's Failure
問題の要約
T君の家にN個の食品があり、i番目の食品のおいしさはAi。
また、T君には嫌いな食品がK個あり、具体的にはi=1,2,...,Kについて、Bi番目の食品が嫌い。
T君はN個の食品のうち、おいしさが最大の食品から1つを選んで食べようと考えている。
T君が嫌いな食品を食べる可能性があるならばYesを、食べる可能性が無いならばNoを出力せよ。
制約
1<=K<=N<=100
1<=Ai<=100
1<=Bi<=N
Biはすべて相異なる
入力
N K
A1 A2 ... AN
B1 B2 ... BK
考え方
1,おいしさが最大の食品を全て調べたときに嫌いな食品があるときにYes、そうでなければNoということになる。
2,おいしさの値をvector<int>Aで管理する。
3,おいしさの値を比較して、おいしさが最大の値を持っておく。
4,嫌いな食品を食べる可能性があるかどうかを、bool checkで管理する。初期値はfalse。
5,Bi番目の食品のおいしさが最大のおいしさならcheckをtrueにする。
このとき、Biが1始まりなことに注意する。Biをデクリメントすることで、0始まりの値にすることができる。
実際のプログラム
#include<iostream>
#include<vector>
using namespace std;
int main(){
int N,K;
cin >> N >> K;
vector<int> A(N);
int max_num = 0;
for(int i = 0; i < N; ++i){
int Ai;
cin >> Ai;
A[i] = Ai;
max_num = max(max_num, A[i]);
}
bool check = false;
for(int i = 0; i < K; ++i){
int Bi;
cin >> Bi;
Bi--;
if(A[Bi] == max_num){
check = true;
}
}
if(check){
cout << "Yes" << endl;
}else{
cout << "No" << endl;
}
return 0;
}