HDU 4312 Contest 2
2024-09-30 20:37:33
题目要求两点间的最大值作为距离即:
即是切比雪夫距离。而切比雪夫距离与曼哈顿距离的转换却很巧妙。
把平面坐标所有点绕原点逆向旋转45度后,所得点的曼哈顿距离之和除以√2,即是切雪比夫距离。旋转点的公式是
提取无理数,即每个新坐标可以是(x-y,x+y)。计算其曼哈顿距离后除以2即可。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define LL __int64
using namespace std; struct point{
int x,y;
int num;
}acm[100005];
int n; bool cmpx(point a, point b){
if(a.x<b.x) return true;
return false;
}
bool cmpy(point a,point b){
if(a.y<b.y) return true;
return false;
} LL distx[100005],disty[100005]; LL mint(LL a,LL b){
if(a<b) return a;
return b;
} void init(){
for(int i=0;i<n;i++)
distx[i]=disty[i]=0;
} int main(){
int T,a,b;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
init();
for(int i=0;i<n;i++){
scanf("%d%d",&a,&b);
acm[i].x=a-b; acm[i].y=a+b;
acm[i].num=i;
}
LL tmp;
sort(acm,acm+n,cmpx);
tmp=0;
for(int i=0;i<n;i++){
if(!i)
tmp=distx[acm[i].num]=0;
else{
distx[acm[i].num]=tmp=tmp+(LL)i*((LL)acm[i].x-(LL)acm[i-1].x);
}
}
tmp=0;
for(int i=n-1;i>=0;i--){
if(i==n-1){
tmp=0;
distx[acm[i].num]+=tmp;
}
else {
tmp=tmp+(LL)(n-1-i)*((LL)acm[i+1].x-(LL)acm[i].x);
distx[acm[i].num]+=tmp;
}
}
sort(acm,acm+n,cmpy);
for(int i=0;i<n;i++){
if(!i)
disty[acm[i].num]=tmp=0;
else{
disty[acm[i].num]=tmp=tmp+(LL)i*((LL)acm[i].y-(LL)acm[i-1].y);
}
}
for(int i=n-1;i>=0;i--){
if(i==n-1){
tmp=0;
disty[acm[i].num]+=tmp;
}
else {
tmp=tmp+(LL)(n-1-i)*((LL)acm[i+1].y-(LL)acm[i].y);
disty[acm[i].num]+=tmp;
}
}
LL ans=distx[0]+disty[0];
for(int i=1;i<n;i++)
ans=mint(ans,distx[i]+disty[i]);
printf("%I64d\n",ans/2);
}
return 0;
}
最新文章
- 基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台
- 敏捷项目开源管理软件ScrumBasic(1)
- 20169212《Linux内核原理与分析》第二周作业
- C/C+小记
- 一个PHP数组能占多大内存
- 让ie8支持foreach
- .NET中的类库
- JS判断客户端、浏览器、操作系统
- python3.6 简单爬虫
- vue项目中对axios的二次封装
- 【mongodb系统学习之九】mongodb保存数据
- vue框架中的Axios封装
- hbase基础建表语句
- mac上制作ubuntu引导盘
- liunx centox ssh 配置
- SpringWeb项目常用注解简单介绍
- maven 常用参数使用详解
- 天梯赛2016-L2
- Vulkan入门流程
- HttpServlet Service方法
热门文章
- python的urlencode与urldecode
- 微信小程序怎么获取当前页面的url
- Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题
- 使用Android Studo开发NDK之Gradle的配置(能debug C代码)
- jQuery插件 -- Cookie插件
- UVA - 10043 Chainsaw Massacre
- 循环神经网络(RNN, Recurrent Neural Networks)介绍
- 杂项-公司:Altera
- Centos7 minimal 系列之rabbitmq安装(八)
- PHP魔术方法__call()篇