Minimize the error
You are given two arrays A and B, each of size n. The error, E, between these two arrays is defined . You have to perform exactly k1 operations on array A and exactly k2 operations on array B. In one operation, you have to choose one element of the array and increase or decrease it by 1.
Output the minimum possible value of error after k1 operations on array A and k2 operations on array B have been performed.
Input
The first line contains three space-separated integers n (1 ≤ n ≤ 103), k1 and k2 (0 ≤ k1 + k2 ≤ 103, k1 and k2 are non-negative) — size of arrays and number of operations to perform on A and B respectively.
Second line contains n space separated integers a1, a2, …, an ( - 106 ≤ ai ≤ 106) — array A.
Third line contains n space separated integers b1, b2, …, bn ( - 106 ≤ bi ≤ 106)— array B.
Output
Output a single integer — the minimum possible value of after doing exactly k1 operations on array A and exactly k2 operations on array B.
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <algorithm>
#include <functional>
#define inf 1000000000
using namespace std;
typedef long long ll;
const int MAXN=1e9+10;
const int MAX=1e5+10;
const double eps=1e-6;
int n,k1,k2;
struct NODE{
ll a,b,dis;
friend operator<(NODE a,NODE b){
return a.dis<b.dis;
}
};
NODE node[MAX];
priority_queue<NODE>q;
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("in.txt","r",stdin);
//freopen("output.txt","w",stdout);
#endif
cin>>n>>k1>>k2;
int temp=k1+k2;
for(int i=1;i<=n;i++)
scanf("%lld",&node[i].a);
for(int i=1;i<=n;i++){
scanf("%lld",&node[i].b);
node[i].dis=abs(node[i].a-node[i].b);
q.push(node[i]);
}
ll ans=0;
while(temp){
NODE t=q.top();
q.pop();
if(!t.dis) break;
t.dis--;temp--;
q.push(t);
}
while(q.size()){
NODE t=q.top();q.pop();
ans+=t.dis*t.dis;
}
if(temp&&temp%2!=0) cout<<ans+1<<endl;
else cout<<ans<<endl;
return 0;
}

本文介绍了一个算法问题,即通过操作两个数组A和B来最小化它们之间的误差E。具体操作为对每个数组进行指定次数的元素增减1,最终目标是最小化两数组间的误差平方和。
744

被折叠的 条评论
为什么被折叠?



