题解:B4298 [蓝桥杯青少年组国赛 2022] 金箍棒
题目传送门
前言
我们有
思路
这道题目要求我们找到
代码
#include <bits/stdc++.h>
using namespace std;
int IO(int N, int K, vector<int>& h) {
const int ah = 1000;
vector<int> c(ah + 1, 0);
int io = INT_MAX;
for (int i = 0; i < K; ++i) {
c[h[i]]++;
}
for (int i = 0; i <= N - K; ++i) {
int e = 0;
int sum = 0;
for (int h = 1; h <= ah; ++h) {
sum += c[h];
if (sum >= (K + 1) / 2) {
e = h;
break;
}
}
int ops = 0;
for (int h = 1; h <= ah; ++h) {
ops += abs(h - e) * c[h];
}
io = min(io, ops);
if (i + K < N) {
c[h[i]]--;
c[h[i + K]]++;
}
}
return io;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, K;
cin >> N >> K;
vector<int> h(N);
for (int i = 0; i < N; ++i) {
cin >> h[i];
}
cout << IO(N, K, h) << endl;
return 0;
}