yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

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;
}