博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学校选址_洛谷U3451_带权中位数
阅读量:4641 次
发布时间:2019-06-09

本文共 1057 字,大约阅读时间需要 3 分钟。

题目描述

在一条大路一旁有许多栋楼,每栋楼里有许多小学生(哈哈哈一波小学生来袭!)。但是这条路上没有小学!!!!所以唯恐世界不乱的牛A打算在路上(汽车什么的都不敢来这个小学生云集的地方咯,所以不用担心安全问题)任选一点(可以和楼重合,当然也可以不重合)建立一个小学,且使所有小学生上学走的路程之和最短。

输入格式:

第1行一个整数n(1 <= n <= 10000),表示路两旁楼的数量。

接下来的n行,每行2个整数ai(0 <= ai <= 20000)和bi(1<= bi <= 10),分别表示楼的横坐标(真的很巧,所有楼都在同一条直线上,即纵坐标都相等)和楼里小学生的人数。

数据保证ai互不相同。

输出格式:

所有小学生走的最小的路程之和。

友情提示

所有数据的n均大于1000

题解

带权中位数,很明显了吧?还是一维的

顺手就码出来了,c++自带快排好评,终于摆脱了苦逼的fp(大概?)

代码

#include 
#include
#include
using namespace std;struct pos{ int a,b;};pos x[10001];int n;bool cmp(pos x,pos y){ return x.a>y.a;}int main(){ int sum=0; scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d%d",&x[i].a,&x[i].b); sum+=x[i].b; } sort(x+1,x+n+1,cmp); int f,t=0,ans=0; for (int i=1;i<=n;i++) { t+=x[i].b; if (t>sum/2) { f=x[i].a; break; } } for (int i=1;i<=n;i++) ans+=x[i].b*abs(f-x[i].a); printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/olahiuj/p/5781236.html

你可能感兴趣的文章
JS 获取当前时间
查看>>
bzoj3238 [Ahoi2013]差异
查看>>
ASP.NET常见面试题及答案(130题)
查看>>
初学CDQ分治-NEU1702
查看>>
React组件的生命周期
查看>>
java笔记--使用SwingWoker类完成耗时操作
查看>>
Android应用程序后台加载数据
查看>>
2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
查看>>
CentOS6.5手动升级gcc4.8.2
查看>>
3.9 java基础总结集合①LIst②Set③Map④泛型⑤Collections
查看>>
Unix和Linux下C语言学习指南
查看>>
linux指令
查看>>
linux下面升级 Python版本并修改yum属性信息
查看>>
局域网内通讯APP
查看>>
Unity Shader 图片流光效果实现(纯计算方式)
查看>>
POJ 2002 Squares
查看>>
Java 内存分配
查看>>
ObjectDataSource控件执行Delete操作时,出现“未能找到带参数的非泛型方法”的解决方案...
查看>>
Ubuntu17.10 React Native 环境搭建
查看>>
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
查看>>