poj1723 SOLDIERS
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的更多相关文章
- [POJ1723]SOLDIERS(中位数)
题意 给出n个点的坐标,它们只能往上.下.左.右一格一格地移动,求使其移动至水平线上的最小步数. 思路 转载 先易后难,对于纵向的问题,我们推个公式,,这个很容易看出是货仓选址问题,k取y[i]的中位 ...
- POJ1723 SOLDIERS 兄弟连
SOLDIERS 有一个性质:在一个长为n的序列a中找一个数 \(a_k\) 使得 \(\sum\limits_{i=1}^n abs(a_i-a_k)\) 最小,则 \(a_k\) 是a的中位数. ...
- POJ1723,1050,HDU4864题解(贪心)
POJ1723 Soldiers 思维题. 考虑y坐标,简单的货舱选址问题,选择中位数即可. 再考虑x坐标,由于直接研究布置方法非常困难,可以倒着想:不管如何移动,最后的坐标总是相邻的,且根据贪心的思 ...
- $Poj1723/AcWing123\ Soldiers$ 排序
$Poj$ $AcWing$ $Description$ $Sol$ 分别处理$x$坐标和$y$坐标.$y$坐标显然很好处理,就是排个序然后取中位数就好了.$x$没有$y$那么直接叭.所以我首先写了个 ...
- OpenJudge/Poj 1723 SOLDIERS
1.链接地址: http://bailian.openjudge.cn/practice/1723/ http://poj.org/problem?id=1723 2.题目: 总时间限制: 1000m ...
- [转]13 Hours: The Secret Soldiers of Benghazi
转:http://www.imfdb.org/wiki/13_Hours:_The_Secret_Soldiers_of_Benghazi The following weapons were use ...
- hdu 4412 Sky Soldiers(区间DP)
Sky Soldiers Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- csu 1749: Soldiers ' Training(贪心)
1749: Soldiers ' Training Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 37 Solved: 18[Submit][Stat ...
- POJ 1723 SOLDIERS
SOLDIERS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 1 ...
随机推荐
- input type=date时,时间数据回填,报错The specified value "2019-0404-18" does not conform to the required format, "yyyy-MM-dd".
<input autocomplete id="start-time" name="start_time" type="date" c ...
- 一个简单jpa例子
package com.example.demo.entity; import javax.persistence.*; /*使用jpa注解配置映射关系*/ /*告诉jpa这是一个实体类和(数据表映射 ...
- StatefulSet
StatefulSet: 1.稳点且唯一的网络标识符 2.稳点且持久的存储 3.有序.平滑的部署和扩展 4.有序.平滑的删除和终止 5.有序的滚动更新 三个组件组成:headless(无头服务) ...
- GlusterFS卷的种类
1.分布卷 在分布式卷中,文件随机扩展到卷中的砖块中. 使用分布式卷,需要扩展存储和冗余不是很重要,或由其他硬件/软件层提供. 创建语法:gluster volume create [transpor ...
- WPF中如何为ItemsControl添加ScrollViewer并显示ScrollBar
今天在开发的过程中突然碰到了一个问题,本来的意图是想当ItemsControl中加载的Item达到一定数量时,会出现ScrollViewer并出现垂直的滚动条,但是实际上并不能够达成目标,对于熟手来说 ...
- python设计模式第十天【观察者模式】
1.应用场景 (1)监听事件驱动程序中的外部事件 (2)监听某个对象的状态变化 (3)发布-订阅模型中,消息出现时通知邮件列表中的订阅者 2. 观察者模式UML图 3. 代码实现: #!/usr/bi ...
- web浏览器兼容问题
1.居中问题 div中,ie默认居中,而ff(firefox)默认是向左对齐.解决办法:margin 0 auto 2.高度问题 如果有两个div排列或者嵌套,如果第一个div设置了高度,而内容超出d ...
- How to install macOS Sierra on Skylake
create usb installer sudo /Applications/Install\ macOS\ Sierra.app/contents/resources/createinstallm ...
- 51-node-1649齐头并进(最短路)
题意:中文题,没啥坑点: 解题思路:这道题一开始以为要跑两个最短路,后来发现不用,因为如果给定了铁路的线路,那么,公路一定是n个节点无向图的补图,所以,铁路和公路之间一定有一个是可以直接从1到n的,我 ...
- java 转义字符"\u0010" "\010" "\2"等
java转义字符 \xxx 八进制转义符 \uxxxx 十六进制转义符 像"\010","\u0010"这种字符 ...