luogu1632 点的移动
其实只需要开三重循环
根据OI中的一个重要的原理
给定一个序列a,求一个数x使得\(\sum |a_i-x|\)最小,那么这个数是序列a的中位数
证明略
然后既然是中位数,一定是数列中的数,类比到这题,聚集到的点的横纵坐标一定都存在于某些点上,所以O(n^2)枚举聚集到哪个点。
然后求出所有点到这个聚集点的距离,sort一下,求一个前缀和,更新ans数组即可,预计复杂度\(O(n^3\log n)\)
#include <bits/stdc++.h>
using namespace std;
struct coord
{
int x, y;
} a[55];
int n, ans[55], dis[55];
int main()
{
scanf("%d", &n);
memset(ans, 0x3f, sizeof(ans));
for (int i = 1; i <= n; i++)
scanf("%d%d", &a[i].x, &a[i].y);
for (int x = 1; x <= n; x++)
for (int y = 1; y <= n; y++)
{
for (int p = 1; p <= n; p++)
dis[p] = abs(a[p].x - a[x].x) + abs(a[p].y - a[y].y);
sort(dis + 1, dis + 1 + n, less<int>());
for (int p = 1; p <= n; p++)
{
dis[p] += dis[p - 1];
ans[p] = min(ans[p], dis[p]);
}
}
for (int i = 1; i <= n; i++)
printf("%d\n", ans[i]);
return 0;
}
luogu1632 点的移动的更多相关文章
随机推荐
- svn 撤销修改
1,更新到最新版本 不知道是哪个文件的问题时,可以svn log查看日志,基本上可以通过哪一次提交修改了哪一个文件推算出 是哪个文件的问题. 若知道是哪个文件的问题,直接svn log 文件名 大致确 ...
- 11-09SQLserver 基础-数据库之汇总练习45题
设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...
- 10-31SQLserver基础--聚合函数、分组
在查询语句时,也存在一些方法和属性,而这些方法在查询时统称为函数,便利查询时使用 聚合函数(都是针对字段操作) 聚合是缩减一系列输入值的表达式,例如缩减为单个值. Select*from biao 1 ...
- 1、序列化 2、转义 3、eval 4、正则表达式 5、时间处理
1.序列化 JSON.stringify(obj) 序列化 JSON.parse(str) 反序列化 2.转义 decodeURI( ) URl中 ...
- 389. Find the Difference 找出两个字符串中多余的一个字符
[抄题]: Given two strings s and t which consist of only lowercase letters. String t is generated by ra ...
- iOS 隐藏App图标
1.在进入Info.plist文件 2.在Info.plist文件中新添加一项,把Key值设置为SBAppTags,在Type选项中选取Array 3.在Array中新添加一项Item0,Type类型 ...
- 在windows中安装OpenSSH,无密码登录,永远不断线
到这里下载最新安装包:https://github.com/PowerShell/Win32-OpenSSH/releases下载下来解压,然后用管理员打开服务器自带的PowerShell,运行下列命 ...
- 层次分析法(Analytic Hierarchy Process,AHP)
昨天晚上室友问我什么是层次分析法?我当时就大概给他介绍了一下,没有细讲. 今天我仔细讲讲这个. 层次分析法是运筹学里面的一种方法,是讲与决策总是有关的元素分解成目标.准则.方案等层次,在此基础上进行定 ...
- AbstractBootstrap的研读
AbstractBootstrap是一个工具类,用来配置和启动Channel的,下面看下AbstractBootstrap的类继承,ServerBootstrap用于启动ServerChannel的, ...
- js中使用Java的方式
1. 使用DWR框架 2. 使用AJAX方式