SOLDIERS

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

于是在这题里,对于纵坐标直接找中位数,算一遍上面的式子即可。

横坐标稍加处理:先从小到大排序,此时数组的下标就是士兵最后从左到右的顺序。然后还是找中位数。但是每个士兵是从左到右站,而不是在一条直线上。后来想到把每个士兵的横坐标 \(x_i\) 减去i,这样士兵都在一条直线上,再套用上面的式子即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
const int N=10005;
int n,x[N],y[N],ans;
int labs(int t)
{
return t>=0?t:-t;
}
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;++i)
scanf("%lld%lld",&x[i],&y[i]);
sort(x+1,x+n+1);
for(int i=1;i<=n;++i)x[i]-=i;
sort(x+1,x+n+1);
sort(y+1,y+n+1);
int mid=n/2+1;
for(int i=1;i<=n;++i)
ans+=labs(x[mid]-x[i])+labs(y[mid]-y[i]);
printf("%lld\n",ans);
return 0;
}

最新文章

  1. jQuery系列:DOM操作
  2. MySQL 注册码
  3. SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显
  4. ORACLE绑定变量隐式转换导致性能问题
  5. GBDT(MART) 迭代决策树简介
  6. 浏览器中Javascript单线程分析
  7. OpenCV Start
  8. Delphi中WebBrowser拦截网页Alert对话框消息(转)
  9. Maven相关介绍
  10. c#个性化安装包
  11. 基于Flex的HTTPService(GET和POST)
  12. [html5] 学习笔记-SVG
  13. 提交到svn服务器时,一直缓冲不,
  14. Sequel自动生成Select语句
  15. mapState
  16. 控制反转IOC
  17. PHP取凌晨时间戳
  18. Android文字转语音引擎(TTS)使用
  19. servelet基础
  20. ajax多个请求执行顺序

热门文章

  1. Xcode 8 修改已创建工程的 organizion name
  2. Markdown 语法使用
  3. Periodic-table
  4. [原]HelloWorld
  5. Eclipse传递main函数参数
  6. kill和raise
  7. php:数据库封装类
  8. 七 Hibernate5种查询检索方式,单表&amp;多表
  9. 侧边栏下拉时箭头的旋转动画(treeView控件)
  10. Python学习笔记之基础篇(二)python入门