51nod 1110 距离之和最小
考虑贪心取中位数,因为中位数到左边的点和右边的点的个数相同,更合理,权值的话可以转化为一个单点,然后没了。
#include<bits/stdc++.h> using namespace std; #define ll long long int n; struct ss{ ll x,w; }a[100005]; bool cmp(ss g,ss h){ return g.x<h.x; } int main(){ ios::sync_with_stdio(false); cin>>n; ll mid,sum=0; for(int i=1;i<=n;i++){ int x,w; cin>>a[i].x>>a[i].w; sum+=a[i].w; } sort(a+1,a+n+1,cmp);//排序 sum/=2; int j; for(j=1;a[j].w<=sum;j++){//取中位数 sum-=a[j].w; } ll ans=0; for(int i=1;i<=n;i++){ ans+=(ll)abs(a[j].x-a[i].x)*a[i].w;//计算总值 } cout<<ans; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」