CF650A Watchmen
首先解释一下题目里面的两个概念:
曼哈顿距离:即 \(|x_a - x_b| + |y_a - y_b|\)
欧几里得距离:即 \(\sqrt{(x_a - x_b) ^ 2 + (y_a - y_b)^2}\),也就是两个点在平面上的连线长度。
在图里表示一下就是这样:

在图中,\(AB\) 即为 \(A, B\) 两点间的欧几里得距离,\(AC + BC\) 即为两点间的曼哈顿距离。(图中 \(\angle C = 90 \degree\))
我们可以很容易的看出,两点间的欧几里得距离大于等于他们的曼哈顿距离。因为欧几里得距离就是如图所示三角形的斜边,而曼哈顿距离则为两直角边之和。众所周知,三角形两边之和大于第三边。因此,重要结论如下:
两点间欧氏距离等于曼哈顿距离,当且仅当两点的横坐标或纵坐标相同。
这样就非常简单了。我们搞三个 \(\texttt{map}\),分别记录横坐标相同的点的个数,纵坐标相同的点的个数,横纵坐标都相同的点的个数。从 \(1\) 到 \(n\) 遍历每个点,对于当前点 \((x_i, y_i)\),我们可以选择从之前的横坐标等于 \(x_i\) 的点中任意选一个,方案数为 \(Map_{x_i}\),对于纵坐标同理。但是别忘了减去与当前点重合的点。
于是超级剪短的代码就出来了。
核心代码:
map<int, int> x, y;
map<PII, int> s;
PII p[N]; // PII represents for pair<int, int>
for (int i = 1; i <= n; i ++ ) {
res += x[p[i].x] ++ + y[p[i].y] ++ - s[{p[i].x, p[i].y}] ++ ;
} // 代码压行勿喷
CF650A Watchmen的更多相关文章
- CF650A Watchmen(STL+map)
目录 CF650A Watchmen 1. 手推公式 2.算法 3.优化 4.补充 CF650A Watchmen 只有三个map的一篇题解 1. 手推公式 \(|x2-x1|+|y2-y1|=\sq ...
- Codeforces Round #345 (Div. 1) A. Watchmen
A. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...
- Codeforces 650A Watchmen
传送门 time limit per test 3 seconds memory limit per test 256 megabytes input standard input output st ...
- CodeForces 651C Watchmen map
Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn t ...
- Codeforces Round #345 (Div. 1) A. Watchmen 模拟加点
Watchmen 题意:有n (1 ≤ n ≤ 200 000) 个点,问有多少个点的开平方距离与横纵坐标的绝对值之差的和相等: 即 = |xi - xj| + |yi - yj|.(|xi|, |y ...
- codeforces 651C Watchmen
Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn t ...
- CodeForces 651 C Watchmen
C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...
- Codeforces Round #345 (Div. 1) A - Watchmen 容斥
C. Watchmen 题目连接: http://www.codeforces.com/contest/651/problem/C Description Watchmen are in a dang ...
- codeforces 650 C. Watchmen(数学公式)
C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...
- C - Watchmen
题目链接:https://vjudge.net/contest/237394#problem/C Watchmen are in a danger and Doctor Manhattan toget ...
随机推荐
- Oracle:Ora-01652无法通过128(在temp表空间中)扩展temp段的过程-解决步骤
现象:查询select * from v$sql时提示"Ora-01652无法通过128(在temp表空间中)扩展temp段的过程" 临时文件是不存储的,可以将数据库重启,重启后重 ...
- MySQL系列之——MySQL介绍和安装、MySQL简介及产品线、安装方式(源码安装 rpm方式 yum方式 通用二进制安装)
文章目录 一 MySQL介绍和安装 1.1 什么是数据? 1.2 什么是数据库管理系统(DBMS)? 1.3 数据库管理系统种类 二 MySQL简介及产品线 2.1 MySQL行业主流版本 2.2 企 ...
- Python join拼接
import os print(os.path.join("I","love","you.")) # /XXX 代表的是绝对路径 这个变量之 ...
- 一次考试的dp题
很明显是dp 看题目的时候我们先进行初步的思考,发现一个性质 一个点时不可能被重复覆盖三次的很显然,如果一个点被覆盖了3次,这3个覆盖他的区间一定是有一个区间被完全包含的,因为有贡献的左右端点只有两个 ...
- centos7 oracle11gR2安装
CentOS7安装Oracle 11gR2 图文详解 摘自: http://www.linuxidc.com/Linux/2016-04/130559.htm 最近要运维一个项目,准备在家办公,公司无 ...
- Zuul 2.1.5 设计分析
前言 https://github.com/Netflix/zuul zuul 是 SpringCloud 家族老兵,使用 Java 微服务大部分都在使用 zuul 作为网关.既然他如此重要,那么我们 ...
- 记一次 openSUSE Tumbleweed 下安装 k8s
出现的问题 因为没有K8s基础的而踩了不少坑. kubeadm kubelet 最好指定版本安装,因为kubelet的版本需要小于等于kubeadm的版本,否则就会报错. 运行 kubeadm ini ...
- 从零开始搭建antd4.x + react16 + redux4 + webpack4 + react-router5基础框架解析
以上是2020年10月份的版本,后来,我将xmind进行了完善,文档也写的差不多了,可是,电脑坏了,硬盘换了,文件都没有了.这已经是第三次写这个文档了,思维导图就不更新了,按照几个重点进行说明. 这个 ...
- Redis Functions 介绍之一
Redis提供了编程接口(programming interface)可以让你在Redis服务器端执行客户的脚本. 一个重大的变化就是从Redis 7开始,你可以选择使用Redis Functions ...
- 解决ADS1.2与MDK4.7冲突问题
需要添加2个系统变量. 1,在我的电脑点击属性--->高级--->环境变量---->系统变量,增加环境变量名: ARMCC5LIB 变量值:C:\Keil\ARM\ARMCC\lib ...