- 12-28周常练习
E题参考实现
- @ 2025-12-28 21:32:24
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
void chmin(int& a, int b){ if(a > b){ a = b; } }
int main(){
int N, M;
cin >> N >> M;
vector<int> H(N);
for(auto& h : H) cin >> h;
vector<int> W(M);
for(auto& w : W) cin >> w;
sort(H.begin(), H.end());
vector<int> sum1((N + 1) / 2), sum2((N + 1) / 2);
for(int i = 0; i + 1 < N; i += 2) sum1[i / 2 + 1] = sum1[i / 2] + H[i + 1] - H[i];
for(int i = N - 2; i > 0; i -= 2) sum2[i / 2] = sum2[i / 2 + 1] + H[i + 1] - H[i];
int ans = INF;
for(int w : W){
int x = lower_bound(H.begin(), H.end(), w) - H.begin();
if(x & 1) x ^= 1;
chmin(ans, sum1[x / 2] + sum2[x / 2] + abs(H[x] - w));
}
cout << ans << endl;
}
0 条评论
目前还没有评论...