codechef Taxi Driver
2024-09-30 13:04:04
题意:
给N个点求任意两个点的“距离”总和:
A,B的“距离”定义为:min(|ax-bx|,|ay-by|) (n<200000)
好题!
解析:
看着没思路
先是公式化简:让 ax=sx+sy;
ay=sx-sy;
bx=tx+ty;
by=tx-ty;
于是:min(|ax-bx|,|ay-by|)=min(ax-bx,bx-ax,ay-by,by-ay)=min(sx-tx+sy-ty,tx-sx+ty-sy,sx-tx+sy-ty,tx-sx+ty-sy);
=|sx-tx|+|sy-ty|
这里就明显了吧:
sx=(ax+ay)/2 sy=(ax-ay)/2
于是分别按sx,sy排序;
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <vector> #define ll long long
#define N 222222 ll a[N],b[N];
using namespace std; int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int n,c,d;
scanf("%d%d%d",&n,&c,&d);
for (int i=;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[i]=(ll) c*x+d*y;
b[i]=(ll) c*x-d*y;
} sort(a+,a+n+);
sort(b+,b+n+); ll ans=;
ll ans1=;
for (int i=;i<=n;i++)
{
ans1+=a[i];
ans+=a[i]*i-ans1;
}
ans1=;
for (int i=;i<=n;i++)
{
ans1+=b[i];
ans+=b[i]*i-ans1;
}
printf("%lld\n",ans>>);
}
return ;
}
最新文章
- 让MacBook识别noppoo mini 84
- TJ2016 CTF Write up
- UVALive 3401 彩色立方体
- javascript按中文首字母排序
- jQuery 图片等比缩放
- 获取滚动条ScrollBar宽度
- POJ 2442 Sequence
- Installing IPython using pip on CentOS
- 函数mem_pool_create
- delphi Edit - TActionList
- 仿建行JS键盘
- Spring注入值得2种方式:属性注入和构造注入
- unittest模块的常用方法:
- SpringBoot整合Jsp和Thymeleaf (附工程)
- Android 常用知识点
- GUI学习之八——复选框QCheckBox的学习总结
- A - Shashlik Cooking CodeForces - 1040B
- linux如何查看端口被哪个进程占用
- 牛客多校第二场 G transform
- 某些浏览器没有canvas.toBlob 方法的解决方案
热门文章
- laravel关联用户
- PMP项目管理学习笔记(8)——整个管理之监控项目工作、综合变更控制、结束项目或阶段
- sql server 2000备份还原数据库
- 在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图
- Idea maven项目不能新建package和class的解决方法
- iview modal 点击打开窗口,打开前先销毁里面的内容再打开
- python3查询Excel中A表在B表没有的数据,并保存到新的Excel,这里用的是“xlrd”和“xlwt”
- Windows环境下安装 mysql-8.0.11-winx64 遇到的问题解决办法
- 第五章:C++程序的结构
- 第二天,学习if,变量,注释