Official
B - Piano 2 Editorial
by
B - Piano 2 Editorial
by
sotanishy
この問題では,数列の要素を順番に並べ替えることが問われています.これは,ソートと呼ばれる操作で,多くの言語で標準機能として提供されています.たとえば, Python, C++ ではともに sort
という関数が提供されています.
この問題を解くには,\(A\) と \(B\) を結合した数列 \(C\) を用意し, \(C\) をソートしたあと, \(C\) の要素を順番に見ていって隣り合う要素がともに \(A\) に含まれているかを調べればよいです.
ある値が数列に含まれているかどうかの判定には,たとえば Python では in
演算子を,C++ では set
を用いるのが便利です.
実装例 (Python)
N, M = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
C = A + B
C.sort()
for i in range(N + M - 1):
if C[i] in A and C[i + 1] in A:
print("Yes")
exit()
print("No")
実装例 (C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<int> A(N), B(M);
for (auto& x : A) cin >> x;
for (auto& x : B) cin >> x;
auto C = A;
for (auto x : B) C.push_back(x);
sort(C.begin(), C.end());
set<int> st(A.begin(), A.end());
for (int i = 0; i < N + M - 1; ++i) {
if (st.contains(C[i]) && st.contains(C[i + 1])) {
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
}
posted:
last update: