soldiers真乃神题也!

行列显然可以分开处理。

行好办,显然就是一个货仓选址问题,取中位数即可。

列呢??

??????

因为懒得推式子,用不了二分,我决定使用枚举大法!一算复杂度O(n^2),勉强可以卡过。

于是我做好了卡常数的准备,正在实现枚举及求值时,得到了援助:

你把士兵按照x排序,然后把x[i] - i即可转化为行上面的。

我略加思索:排好后是x[1], x[1] + 1, x[i] + 2, ..., x[i] + (i - 1)

那么我事先减去,便是x[1], x[1], x[1], ..., x[1]

妙啊,妙啊!

关于为何排序:使用了一点贪心的思想:如果一个A在B左边,那么排好队之后A也一定在B左边。

然后我抱着试一试的心态,过了样例,一口气AC了!!!


我们学到了什么?

转换:减去i

 #include <cstdio>
#include <algorithm>
#include <cstring>
using std::sort;
inline void read(int &x) {
x = ;
bool f = ;
char c = getchar();
while(c < '' || c > '') {
if(c == '-') {
f = ;
}
c = getchar();
}
while(c <= '' && c >= '') {
x = (x << ) + (x << ) + c - '';
c = getchar();
}
if(f) x = -x;
return;
}
inline void max(int &a, int b) {
if(a < b) a = b;
return;
}
inline void min(int &a, int b) {
if(a > b) a = b;
return;
}
inline int ab(int x) {
return (x < ) ? ((~x) + ) : x;
}
const int N = , INF = 0x7f7f7f7f; int x[N], y[N], n; int main() {
int lx = -INF, sx = INF;
int xx, yy;
read(n);
for(int i = ; i <= n; i++) {
read(x[i]);
read(y[i]);
} long long ans = ; ///solve y -> 1
sort(y + , y + n + );
int k = y[(n + ) >> ];
for(int i = ; i <= n; i++) {
ans += ab(y[i] - k);
} /// solve x -> []
sort(x + , x + n + );
for(int i = ; i <= n; i++) {
x[i] -= (i - );
}
sort(x + , x + n + );
k = x[(n + ) >> ];
for(int i = ; i <= n; i++) {
ans += ab(x[i] - k);
} printf("%lld", ans);
return ;
}

AC代码

poj1723 SOLDIERS的更多相关文章

  1. [POJ1723]SOLDIERS(中位数)

    题意 给出n个点的坐标,它们只能往上.下.左.右一格一格地移动,求使其移动至水平线上的最小步数. 思路 转载 先易后难,对于纵向的问题,我们推个公式,,这个很容易看出是货仓选址问题,k取y[i]的中位 ...

  2. POJ1723 SOLDIERS 兄弟连

    SOLDIERS 有一个性质:在一个长为n的序列a中找一个数 \(a_k\) 使得 \(\sum\limits_{i=1}^n abs(a_i-a_k)\) 最小,则 \(a_k\) 是a的中位数. ...

  3. POJ1723,1050,HDU4864题解(贪心)

    POJ1723 Soldiers 思维题. 考虑y坐标,简单的货舱选址问题,选择中位数即可. 再考虑x坐标,由于直接研究布置方法非常困难,可以倒着想:不管如何移动,最后的坐标总是相邻的,且根据贪心的思 ...

  4. $Poj1723/AcWing123\ Soldiers$ 排序

    $Poj$ $AcWing$ $Description$ $Sol$ 分别处理$x$坐标和$y$坐标.$y$坐标显然很好处理,就是排个序然后取中位数就好了.$x$没有$y$那么直接叭.所以我首先写了个 ...

  5. OpenJudge/Poj 1723 SOLDIERS

    1.链接地址: http://bailian.openjudge.cn/practice/1723/ http://poj.org/problem?id=1723 2.题目: 总时间限制: 1000m ...

  6. [转]13 Hours: The Secret Soldiers of Benghazi

    转:http://www.imfdb.org/wiki/13_Hours:_The_Secret_Soldiers_of_Benghazi The following weapons were use ...

  7. hdu 4412 Sky Soldiers(区间DP)

    Sky Soldiers Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  8. csu 1749: Soldiers ' Training(贪心)

    1749: Soldiers ' Training Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 37  Solved: 18[Submit][Stat ...

  9. POJ 1723 SOLDIERS

    SOLDIERS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 1 ...

随机推荐

  1. js获取数组中相同元素数量

    <script> var array = new Array(1,2,5,1,4,4,2,3,5,1,1,5,5,5,6,7,3,9,9,10); var arr = new Array( ...

  2. phpstorm显示页面不停的在indexing转圈中,并且文件名还一直在刷新

    打开 File下的 Invalidate Caches / Restart...下的 Invalidate and Restart. 便可以了 ......

  3. drf图片字段序列化完整路径

    一.需求 前端需要它想要的数据格式: 原有的数据格式: 二.定制化: 1.可以嵌套序列化pol_type,lit_des,area_detail,但结构如下: class ChrDetailSeria ...

  4. elasticsearch概念及倒排索引简单介绍

    一.概念 集群:一个或者多个节点组织在一起 节点:一个节点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫威角色名字. 分片:将索引划分为多份的能力,允许水平分割和扩展容量,多个分片相应请求 ...

  5. 不使用DataContext直接将ViewModels绑定到ItemsControl控件

    在常规的MVVM设计模式中,都是通过DataContext将ViewModels的一个对象绑定到View的DataContext中,从而完成相应地绑定,在本文中我们将通过另外的一种思路来将ViewMo ...

  6. myisam和innodb的区别对比

    1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...

  7. python数学第三天【方向导数】

    1.方向导数 2. 梯度 3. 凸函数: 4. 凸函数的判定 5. 凸函数的一般表示 6. 凸性质的应用

  8. 使用urllib2+re爬取web网站

    应用1,使用urllib2+re爬取淘宝网指定页面的所有图片

  9. ubuntu 有些软件中不能输入中文

    如果Ubuntu设定的是英文语言,在各种软件例如wps等中很有可能就不能输入中文.这种情况,我们的解决方案是,把中文输入法加到软件的启动文件中,如何加呢?把下面内容加进去就可以解决: export X ...

  10. spring boot web开发 简单的增删改查和spring boot 自带的Junit测试 案例

    创建 web项目 配置pom.xml文件   ------相当于jar包 配置application.yml -----配置文件(spring数据库连接.server服务.logging日志等) 创建 ...