首先解释一下题目里面的两个概念:

  • 曼哈顿距离:即 \(|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的更多相关文章

  1. CF650A Watchmen(STL+map)

    目录 CF650A Watchmen 1. 手推公式 2.算法 3.优化 4.补充 CF650A Watchmen 只有三个map的一篇题解 1. 手推公式 \(|x2-x1|+|y2-y1|=\sq ...

  2. 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 ...

  3. Codeforces 650A Watchmen

    传送门 time limit per test 3 seconds memory limit per test 256 megabytes input standard input output st ...

  4. CodeForces 651C Watchmen map

    Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn t ...

  5. Codeforces Round #345 (Div. 1) A. Watchmen 模拟加点

    Watchmen 题意:有n (1 ≤ n ≤ 200 000) 个点,问有多少个点的开平方距离与横纵坐标的绝对值之差的和相等: 即 = |xi - xj| + |yi - yj|.(|xi|, |y ...

  6. codeforces 651C Watchmen

    Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn t ...

  7. CodeForces 651 C Watchmen

    C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...

  8. Codeforces Round #345 (Div. 1) A - Watchmen 容斥

    C. Watchmen 题目连接: http://www.codeforces.com/contest/651/problem/C Description Watchmen are in a dang ...

  9. codeforces 650 C. Watchmen(数学公式)

    C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...

  10. C - Watchmen

    题目链接:https://vjudge.net/contest/237394#problem/C Watchmen are in a danger and Doctor Manhattan toget ...

随机推荐

  1. strimzi实战之二:部署和消息功能初体验

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<strimzi实战>系列 ...

  2. umich cv-2-1

    UMICH CV Linear Classifiers 对于使用线性分类器来进行图片分类,我们可以给出这样的参数化方法: 而对于这样一个式子,我们怎么去理解呢? 首先从代数的角度,这个f(x,W)就是 ...

  3. MySQL系列之优化——1.优化哲学、2. 优化工具的使用、3. 优化思路分解、4. MySQL参数优化测试、5.1 参数优化、6. 参数优化结果、7. 锁的监控及处理、8. 主从优化

    文章目录 1.优化哲学 1.1 为什么优化? 1.2 优化风险 1.3 谁参与优化 1.4 优化方向 1.5 优化的范围及思路 优化效果和成本的评估: 2. 优化工具的使用 2.1 系统层面的 2.1 ...

  4. 15. 从零开始编写一个类nginx工具, 如果将nginx.conf转成yaml,toml,json会怎么样

    wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...

  5. slice简介

    简介 Go语言中的切片(slice)是一种灵活的数据结构,它构建在数组之上并提供了方便的方式来操作数组的一部分.切片的底层实现涉及到数组和一些元数据.以下是Golang切片的底层实现的详细介绍: 底层 ...

  6. Codeforces Round 856 (Div. 2)C

    C. Scoring Subsequences 思路:我们想要找到满足的最大值的长度最长的的区间,因为单调不减,所以更大的数一定在最大值的里面包含,所以我们用两个指针维护这样一个满足当前i的最大值区间 ...

  7. 使用Python批量发送个性化邮件

    前言 在现代工作环境中,我们经常需要向多个收件人发送个性化的邮件.通过使用Python编程语言,我们可以自动化这个过程,从Excel文件中读取收件人和相关数据,并发送定制的邮件. 首先,导入所需的库: ...

  8. k8s-服务网格实战-入门Istio

    背景 终于进入大家都比较感兴趣的服务网格系列了,在前面已经讲解了: 如何部署应用到 kubernetes 服务之间如何调用 如何通过域名访问我们的服务 如何使用 kubernetes 自带的配置 Co ...

  9. 用python计算圆周率PI,并显示进度条

    用python计算圆周率PI ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪ ...

  10. 震惊,微信小程序可以设置网络字体!真香

    准备工作,获取字体链接 还原设计稿的时候需要用到如下特殊字体(google 的 Montserrat): https://fonts.google.com/specimen/Montserrat 选择 ...