思路
贪心:先把a[i]-b[i]的绝对值存入优先队列,在一 一取出最大值,每次把top元素减一,再把结果的绝对值存入队列。直到操作次数用完,在统计一下结果就好了。
代码
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <cmath>
using namespace std;
typedef long long ll;
int n,k1,k2;
const int N=1e3+5;
ll a[N],b[N];
priority_queue<ll> q;
int main(){
cin >> n >> k1 >> k2;
int sum=k1+k2;
for(int i=0;i<n;i++){
cin >> a[i];
}
for(int i=0;i<n;i++){
cin >> b[i];
}
for(int i=0;i<n;i++){
q.push(abs(a[i]-b[i]));
}
while(sum--){
ll t=q.top();
q.pop();
t--;
q.push(abs(t));
}
ll ans=0;
while(q.size()){
ll t=q.top();
q.pop();
ans+=t*t;
}
cout << ans;
}