C - Watchmen
题目链接:https://vjudge.net/contest/237394#problem/C
Watchmen are in a danger and Doctor Manhattan together with his friend Daniel Dreiberg should warn them as soon as possible. There are n watchmen on a plane, the i-th watchman is located at point (xi, yi).
They need to arrange a plan, but there are some difficulties on their way. As you know, Doctor Manhattan considers the distance between watchmen i and j to be |xi - xj| + |yi - yj|. Daniel, as an ordinary person, calculates the distance using the formula .
The success of the operation relies on the number of pairs (i, j) (1 ≤ i < j ≤ n), such that the distance between watchman i and watchmen j calculated by Doctor Manhattan is equal to the distance between them calculated by Daniel. You were asked to compute the number of such pairs.
Input
The first line of the input contains the single integer n (1 ≤ n ≤ 200 000) — the number of watchmen.
Each of the following n lines contains two integers xi and yi (|xi|, |yi| ≤ 109).
Some positions may coincide.
Output
Print the number of pairs of watchmen such that the distance between them calculated by Doctor Manhattan is equal to the distance calculated by Daniel.
Examples
3
1 1
7 5
1 5
2
6
0 0
0 1
0 2
-1 1
0 1
1 1
11
Note
In the first sample, the distance between watchman 1 and watchman 2 is equal to |1 - 7| + |1 - 5| = 10 for Doctor Manhattan and for Daniel. For pairs (1, 1), (1, 5) and (7, 5), (1, 5) Doctor Manhattan and Daniel will calculate the same distances.
题目大意:输入n,代表有n个点,下面n行代表每个点的坐标,求用以上两种方式求出答案一样的点有多少个
个人思路:第一想法是直接暴力,(这时候还不太清楚怎么大概判断是否会超时),然后很正常的超时了,这里介绍一下怎么大概估计一下是否会超时
1000ms大概能判断10^7的数据,而且是在数据比较水,条件比较好的情况下,反正在这时候就已经很极限了,可能有时候能判断10^8的数据,这就要求后台数据特别水,而且编译环境好的情况下才有可能ac,而这题时限是3000ms,所以充其量估计也就能判3*10^8的数据,所以直接做肯定是超时的,那么下面看一下用
map来做,嗯。。。很快
还有,两个点要满足条件,必须要x相同或者y相同,但要记住减去重复的点
看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
const ll mod=1e9+;
const int maxn=2e5+;
const ll maxa=;
const double x=(1.0+sqrt(5.0))/;
#define INF 0x3f3f3f3f3f3f
//n*(n-1)/2等价于0+1+2+···+n-1
map<ll,ll>mp1;//用于计算有多少个x相同的点
map<ll,ll>mp2;//用于计算有多少个y相同的点
map<pair<ll,ll>,ll>mp;//用于计算有多少个x和y都相同的点
int main()
{
mp1.clear();
mp2.clear();
mp.clear();//清空
int n;
ll a,b,ans=,num=;
cin>>n;
for(int i=;i<n;i++)
{
cin>>a>>b;
num+=mp[make_pair(a,b)];//发现map有个好处,就是关键字是什么都可以,这就大大方便了存储
mp[make_pair(a,b)]++;
ans+=mp1[a];
mp1[a]++;
ans+=mp2[b];
mp2[b]++;
}
cout<<ans-num<<endl;
return ;
}
C - Watchmen的更多相关文章
- 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 ...
- Watchmen CodeForces - 650A
Watchmen CodeForces - 650A Watchmen are in a danger and Doctor Manhattan together with his friend Da ...
随机推荐
- windows服务和进程的区别和联系
Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出. 任何的用户消息通常都是记录在Windows 事件日志里.Windows Serv ...
- keepalived+nginx实现双机热备
keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机, ...
- js强加方法
(function () { Array.prototype.removeItem=function (item) { var index=this.indexOf(item); if(index!= ...
- Python-编写一个mysql注入漏洞检测工具
判断mysql网站是否存在注入漏洞的几个方法: 注入点后加上一个单引号会报错 and 1=1返回正常页面,and 1=2返回的页面不同于正常页面 and sleep(3) 网页会等待3秒左右 根据返回 ...
- Wix 使用总结(续)--关于Feature和Component的状态判断安装过程(转)
安装过程中,有时候需要根据用户的设置来进行不同的安装,其中一个方面就是根据用户选择安装的Feature或者Component,来判断下一步的操作. Wix中提供了相关的判断方法和内置的状态值. ...
- python中报中文编码异常,Non-ASCII ,but no encoding declared
异常信息: SyntaxError: Non-ASCII character '\xe5' in file a.py on line 9, but no encoding declared; see ...
- Mysql 数据库时间更新字段
关于时间更新: 创建时间: CURRENT_TIMESTAMP 更新时间: 勾选根据时间戳更新
- javadoc 工具生成开发API文档
=====================先来一点成就感===================== package com.springMybatis.dao; import com.springMy ...
- JQuery鼠标移动上去显示预览图
body中: <img src="../images/icon_view.gif" bigimg="../img.jpg" title="查看预 ...
- LDA与最小二乘法的关系及其变种详解
1 LDA与最小二乘法的关联 对于二值分类问题,令人惊奇的是最小二乘法和LDA分析是一致的.回顾之前的线性回归,给定N个d维特征的训练样例(i从1到N),每个对应一个类标签.我们之前令y=0表示一类, ...