公式
B - 遠足のおやつ選び / Choosing Snacks for a Field Trip 解説
by
B - 遠足のおやつ選び / Choosing Snacks for a Field Trip 解説
by
MMNMM
\(a\le b\) かつ \(a\le c\) であることは、\(a\le\min\lbrace b,c\rbrace\) であることと同値です。
よって、\(R _ i\le S _ j\ (1\le j\le M)\) は \(\displaystyle R _ i\le\min _ {1\le j\le M}S _ j\) と同値です。 はじめに \(\displaystyle\min _ {1\le j\le M}S _ j\) の値を求めておくことで、それぞれの \(i\) に対して \(\displaystyle R _ i\le\min _ {1\le j\le M}S _ j\) かどうかを定数時間で求めることができます。
実装例は以下のようになります。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<int> R(N);
for (int& r : R) {
cin >> r;
}
// S の最小値を求める
int min_S = 1000000000;
for (int i = 0; i < M; ++i) {
int S;
cin >> S;
min_S = min(min_S, S);
}
// 答えを求める
int ans = 0;
for (int r : R) {
if (r <= min_S) { // R[i] <= min S[j] なら
++ans; // 答えを増やす
}
}
cout << ans << endl;
return 0;
}
N, M = map(int, input().split())
R = list(map(int, input().split()))
# S の最小値を求める
min_S = min(map(int, input().split()))
# 答えを求める
ans = 0
for r in R:
if r <= min_S: # R[i] <= min S[j] なら
ans += 1 # 答えを増やす
print(ans)
投稿日時:
最終更新:
