bzoj 3170: [Tjoi 2013]松鼠聚会
2016-03-22 23:24
344 查看
#include<cstdio> #include<iostream> #include<algorithm> #define M 100008 using namespace std; struct data { int x,y,num; }a[M]; long long n,suma[M],suma1[M],ans,sumb[M],sumb1[M]; bool cmpx(data a1,data a2) { return a1.x<a2.x; } bool cmpy(data a1,data a2) { return a1.y<a2.y; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { int a1,a2; scanf("%d%d",&a1,&a2); a[i].x=a1+a2; a[i].y=a1-a2; } sort(a+1,a+n+1,cmpx); ans=100000000000000000LL; for(int i=1;i<=n;i++) { suma[i]=suma[i-1]+a[i].x; a[i].num=i; } for(int i=n;i;i--) suma1[i]=suma1[i+1]+a[i].x; sort(a+1,a+n+1,cmpy); for(int i=1;i<=n;i++) sumb[i]=sumb[i-1]+a[i].y; for(int i=n;i;i--) sumb1[i]=sumb1[i+1]+a[i].y; for(int i=1;i<=n;i++) { long long ss=0,x=suma[a[i].num]-suma[a[i].num-1],y=sumb[i]-sumb[i-1]; ss=x*(a[i].num-1)-suma[a[i].num-1]+suma1[a[i].num+1]-x*(n-a[i].num)+y*(i-1)-sumb[i-1]+sumb1[i+1]-y*(n-i); ans=min(ss,ans); } printf("%lld\n",ans/2); return 0; }
这个题让我学会了切比雪夫距离。
相关文章推荐
- 第三周内容
- aligned memory allocation
- Apple推史上最廉价手机iPhone SE的目的是什么?
- Spring中用注解实现bean的定义以及作用域
- C++的vector容器用法
- BestCoder #76
- WCF 套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的
- 两种CSS3圆环进度条详解
- 并行程序设计模式--Master-Worker模式
- 【杭电oj】5620 - KK's Steel(递推)
- 【Android】3、分析HelloWorld项目目录结构
- 每天算法01
- 149 git-4 远程操作详解
- 学习进度条
- 编程语言学习
- 【面试题】 单链表的热点面试题(1 )
- effective C++ 第一章:从C转向C++
- Android菜鸟App开发,第一个App(第三天)
- 安卓学习第二弹关于网络请求那点事
- PHP中获取当前页面的完整URL