90分求助
查看原帖
90分求助
490406
tc2004zyzyz楼主2022/1/16 17:40

核心思路是找mid所在房子,做差并乘

#include<bits/stdc++.h>
using namespace std;
int n,l;
long long md,loc[100005],locr[100005],locnum[100005],sm;//地址,地址权,地址前缀和
int jd(int a){
	if(a>0) return a;
	return 0-a;
}//绝对值
int main(){
	cin>>l>>n;
	for(int i=1;i<=n;i++){
		cin>>loc[i]>>locr[i];
		md+=locr[i];
		locnum[i]=locr[i]+locnum[i-1];
	}
	md=ceil(md/2);//中间
	for(int i=1;i<=n;i++){
		if(locnum[i]>=md){//如果中间在此房子
			for(int j=1;j<=n;j++){
				sm+=jd(loc[j]-loc[i])*locr[j];
			}
			break;
		}
	}
	cout<<sm;
	return 0;
}

2022/1/16 17:40
加载中...