Official

B - Takahashi's Failure Editorial by mechanicalpenciI


条件は「食品 \(B_1, B_2, \ldots, B_K\) の中に、美味しさが \(N\) 個の食品の中で最大(同率 \(1\) 位でも良い)であるようなものが存在するか?」と言い換えることができます。

これは、例えば次のようにして判定することができます。

  1. \(N\) 個の食品の美味しさの最大値を求める。(これを \(M\) とする。)
  2. \(j=1,2,\ldots , K\) について、\(A_{B_j}=M\) であるかを調べる。
  3. そのような \(j\)\(1\) つでも存在すれば Yes であり、存在しなければ No となる。

これは for 文と if 文を用いて書くことができます。 添字の範囲に注意してください。 また、Yes を複数回出力したり、Yes の後に No を出力することが無いように注意してください。

c++による実装例:

#include <bits/stdc++.h>
using namespace std;

int main(void) {
	int n, k, m;
	int a[100], b[100];

	cin >> n >> k;
	for (int i = 0; i < n; i++)cin >> a[i];
	for (int i = 0; i < k; i++)cin >> b[i];

	m = -1;
	for (int i = 0; i < n; i++)m = max(m, a[i]);

	for (int i = 0; i < k; i++) {
		if (a[b[i] - 1] == m) {
			cout << "Yes" << endl;
			return 0;
		}
	}

	cout << "No" << endl;
	return 0;
}

Pythonによる実装例:

n,k= map(int, input().split())
a= list(map(int, input().split()))
b= list(map(int, input().split()))

m=max(a)
flag=False

for i in range(k):
	if a[b[i]-1]==m:
		flag=True

if flag:
	print("Yes")
else:
	print("No")

posted:
last update: