Problem

原题链接

Meaning

求曼哈顿距离和欧氏距离相等的坐标组数量。

Solution

这道题用枚举复杂度较高,我们考虑探究当两点的曼哈顿距离与欧氏距离相等时,它们横纵坐标的关系。

如下图所示,\(MO\) 与 \(ON\) 长度之和为 \(M\) 和 \(N\) 两点间的曼哈顿距离,\(MN\) 的长度则为两点间的欧氏距离。此时,在 \(Rt\bigtriangleup MON\) 中,\(MO+ON>MN\),不符合题意。

所以,当 \(Rt\bigtriangleup MON\) 不存在,即 \(MN\) 与坐标轴平行时,\(MO+ON=MN\),此时,有 \(M\) 与 \(N\) 的横坐标或纵坐标相等。

我们也可以通过两种距离的计算公式推出这个结论。

设 \(M(x_i,y_i)\),\(N(x_j,y_j)\)。

当 \(|x_i-x_j|+|y_i-y_j|=\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}\) 时,

等式两边平方,得 \((x_i-x_j)^2+2|x_i-x_j||y_i-y_j|+(y_i-y_j)^2=(x_i-x_j)^2+(y_i-y_j)^2\)。

移项,合并同类项得 \(2|x_i-x_j||y_i-y_j|=0\)。

从而有 \(|x_i-x_j|=0\) 或 \(|y_i-y_j|=0\)。

即 \(x_i=x_j\) 或 \(y_i=y_j\),得证。

所以,我们可以分别记录相同的横坐标出现的次数和相同的纵坐标出现的次数,若某个横坐标或纵坐标出现了 \(k\) 次,那么每两次都可以组成一对,总数应加上 \(C_{k}^{2}=\frac{k!}{2!(k-2)!}=\frac{k(k-1)}{2}\)。

但通过阅读样例 \(2\),可以发现有相同的点出现,导致我们在累加时将横纵坐标都相等的这些点计了两次,需要排掉一次。设对于某个位置上有 \(q\) 个这样的点,我们应该减去一次这些点两两组合成的坐标组数,即减去 \(C_{q}^{2}=\frac{q!}{2!(q-2)!}=\frac{q(q-1)}{2}\)。

Code

通过三个映射表分别维护每个横坐标出现次数,每个纵坐标出现次数和每个位置上的重点数。

注意开 long long

Code
#include<bits/stdc++.h>
using namespace std;
long long n,ans;
map<long long,long long> xeql,yeql;
map<pair<long long,long long>,long long> alleql;
long long f(long long x){
return (x*(x-1))/2;
}
int main(){
long long temx,temy;
scanf("%lld",&n);
for(int i=1;i<=n;++i){
scanf("%lld%lld",&temx,&temy);
++xeql[temx];
++yeql[temy];
++alleql[{temx,temy}];
}
map<long long,long long>::iterator iter1;
map<pair<long long,long long>,long long>::iterator iter2;
for(iter1=xeql.begin();iter1!=xeql.end();++iter1) ans+=f(iter1->second);
for(iter1=yeql.begin();iter1!=yeql.end();++iter1) ans+=f(iter1->second);
for(iter2=alleql.begin();iter2!=alleql.end();++iter2) ans-=f(iter2->second);
printf("%lld",ans);
return 0;
}

CF650A 题解的更多相关文章

  1. CF650A Watchmen(STL+map)

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

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. nginx中的路径匹配规则详解(location规则)

    Nginx的路径匹配规则 Nginx的匹配规则用location指令来实现,Nginx 的location指令用于匹配请求的 URI(请求路径),并根据匹配结果执行特定的处理指令.location是实 ...

  2. 短信接口被刷爆:我用Nginx临时止血

    最近,朋友公司遇到了一件让他们"寝食难安"的事:他们的短信验证码接口被人盯上了,充进去的钱没多久就被刷得一分不剩.不充钱,业务直接受影响:但充钱吧,就像往无底洞里灌水.他们联系短信 ...

  3. Goland搭建Go开发环境

    1.下载和安装Golang 下载链接: 谷歌链接:https://golang.google.cn/dl/ 国内链接:https://studygolang.com/dl 安装示意图: 安装完成后配置 ...

  4. apisix~ApisixPluginConfig的使用

    1. ApisixPluginConfig 的作用 插件配置复用:将插件配置定义为独立的资源,供多个路由或服务引用. 解耦插件与路由:修改插件配置时,只需更新 ApisixPluginConfig,无 ...

  5. gRPC 和传统 RPC 有啥不一样?一篇讲清楚!

    现在大家做系统开发,都喜欢搞"微服务架构"--简单说就是把一个大系统拆成很多小服务,这样更灵活也更容易扩展.那这些服务之间怎么沟通呢?就得靠一种技术叫 RPC(远程过程调用).今天 ...

  6. C#访问注册表

    注册表 .wiz-editor-body .wiz-code-container { position: relative; padding: 8px 0; margin: 5px 0; text-i ...

  7. 2个小时1.5w字| React & Golang 全栈微服务实战

    目录 前言 Golang 入门教程 1. 下载与环境配置 安装 Go Windows 安装 macOS 安装 Linux 安装 理解 GOROOT 和 GOPATH GOROOT GOPATH Go ...

  8. chrome “从 Google 获取图片说明”

    右键菜单"从 Google 获取图片说明"多余去掉. 设置-高级-使用硬件加速模式(如果可用)-关闭 在用户使用上firefox完胜chrome,但是firefox的开发人员工具相 ...

  9. 【记录】Python|Python3程序测试速度的整个流程、方法对比和选取方式

    参考:Python3.7中time模块的time().perf_counter()和process_time()的区别 其他的博客太!长!了!我实在看不下去了,每次都不记得什么场景用什么函数. 让我来 ...

  10. [随记]-linux侦听端口的4种方法

    侦听 192.168.0.1 服务器上的 10086 端口是否打开 1. telnet telnet是windows 内置的功能,当然 linux 也有.用法:  tenlet 192.168.0.1 ...