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 ...
随机推荐
- POJ3784:Running Median
浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:http://poj.org/problem?id=3784 用一个"对顶堆& ...
- POJ1995:Raising Modulo Numbers
二进制前置技能:https://www.cnblogs.com/AKMer/p/9698694.html 题目传送门:http://poj.org/problem?id=1995 题目就是求\(\su ...
- C#中如何设置日期格式
在C#中,ToShortDateString()是用于显示短日期格式的方法,如果使用下面的语句: Label1.Text = DateTime.Now.ToShortDateString(); 那么, ...
- Ubuntu 安装配置Jenkins
一.安装jdk 1. sudo add-apt-repository ppa:webupd8team/java 添加ppa源 如果提示找不到该命令则需要安装: sudo apt-get install ...
- js 面向对象代码
贴上一段同事写的代码,值的纪念 <script type="text/javascript"> //创建箱子类 function Box(option) { var s ...
- LAMP 1.6 Discuz安装
1.下载 ...
- Maven jenkins +Jmeter自动化测试
Maven jenkins +Jmeter自动化测试 1. Jenkins中集成jmeter-maven插件 http://my.oschina.net/u/1377774/blog/168969 2 ...
- UI面试题(1)
1.请创建一个数组对象[@“ad”,@“bc”,@“sdf”,@“yu”],并且对该数组对象进行排序(使用冒泡排序); NSMutableArray *array = [NSMutableArraya ...
- RN控件之ProgressBarAndroid进度条
/** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; import Rea ...
- [51nod1247]可能的路径(思维题)
题意:给定(a,b),(x,y) ,(a,b)可以通向(a-b,b) (a+b,b) (a,a+b) (a,a-b) 求能否到达(x,y) 解题关键:类似于更相减损,变换过程中gcd是一样的. #i ...