按题目随便假设找到了一个x,它的位置的ap,属性bp
看下图
$$$$$$$$$$$$$$$$|||||P &&&&&&&&&&&&&&&
$:ap前,即ai<ap
&:ap后,即ai>ap
|:ap同,即ai==ap
显然要求解下面的式子
sigma 1~n (ai-x)*bi
#include<bits/stdc++.h>
using namespace std;
#define N 100010
#define int unsigned long long
int n;
struct node{
int a,b;
bool operator < (const node & x) const {
return a<x.a;
};
}sky[N];
int sum1[N],sum2[N];
main() {
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&sky[i].a);
for(int i=1;i<=n;i++) scanf("%d",&sky[i].b);
sort(sky+1,sky+1+n);
for(int i=1;i<=n;i++) sum1[i]=sky[i].b+sum1[i-1],sum2[i]=sum2[i-1]+sky[i].a*sky[i].b;
int ans=LLONG_MAX;
for(int i=1;i<=n;i++) {
int x=sky[i].a;
int temp=0;
temp=(sum1[i]-sum1[n]+sum1[i])*x;
temp+=(sum2[n]-sum2[i]-sum2[i]);
ans=min(ans,temp);
}
cout<<ans;
return 0;
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章