Author: lllyouo
Date: 20251016
tag: 前缀和、队列
link: https://www.luogu.com.cn/problem/P3662问题描述
分析
略
参考代码
队列
cpp
#include <bits/stdc++.h>
using namespace std;
int n, k, b, a[100010];
int main() {
cin >> n >> k >> b;
for (int i = 1; i <= b; i++) {
int x; cin >> x;
a[x] = 1;
}
queue<int> q;
int ans = 0;
for (int i = 1; i <= k; i++) {
q.push(i);
if (a[i]) ans++;
}
int cnt = ans;
for (int i = k + 1; i <= n; i++) {
q.push(i);
if (a[i]) cnt++;
if (a[q.front()]) cnt--;
q.pop();
ans = min(ans, cnt);
}
cout << ans << endl;
return 0;
}前缀和
cpp
#include <bits/stdc++.h>
using namespace std;
int n, k, b, s[100010];
int main() {
cin >> n >> k >> b;
for (int i = 1; i <= b; i++) {
int x; cin >> x;
s[x] = 1;
}
for (int i = 1; i <= n; i++) s[i] += s[i - 1];
int ans = 1e9;
for (int i = k; i <= n; i++) {
ans = min(ans, s[i] - s[i - k]);
}
cout << ans << endl;
return 0;
}