A. Watchmen

time limit per test

3 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

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
input
3
1 1
7 5
1 5
output
2
input
6
0 0
0 1
0 2
-1 1
0 1
1 1
output
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.

思路:Manhattan and Daniel will calculate the same distances曼哈顿距离和两点间的距离相等,A(x1,y1) ,B(X2,Y2);

|x1-x2|+|y1-y2|=sqrt((x1-x2)^2+(y1-y2)^2);

画个三角形你可以发现曼哈顿距离就是两直角边的和,而两点的距离为斜边

那么当且x1==x2||y1==y2;这两种距离相等

那么只要找x1==x2||y1==y2,开个数组记录各个x的种类及其个数,y的种类和个数,c[x],b[y],由于x和y的数值比较大所以离散化下可以。

sum+=c[x]*(c[x]-1)/2(c[x]〉=1);sum+=c[y]*(c[y]-1)/2;最如果点相同这样算就相当重复算了一遍,所以只要再找出那些相同的点,以及种类个数

R[i];ans+=(R[i]*(R[i]-1)/2;最后答案就是sum-ans;

  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<map>
7 #include<queue>
8 #include<math.h>
9 #include<set>
10 #include<stack>
11 #include<map>
12 int cmp(const void*p,const void*q);
13 using namespace std;
14 typedef long long LL;
15 typedef struct pp
16 {
17 LL x;
18 LL y;
19 } ss;
20 ss aa[200005*4];LL bb[200005*4];
21 ss ak[200005*4];ss bk[200005*4];
22 LL cc[4*200005];LL yy[200005*4];
23 LL vv[200005*4];
24 typedef pair<int,int> P;
25 int main(void)
26 {
27 LL i,j,k,p,q;
28 scanf("%I64d",&k);
29 { LL cnt=0;LL x,y;memset(vv,0,sizeof(vv));
30 map<P,LL>my;memset(yy,0,sizeof(yy));my.clear();
31 for(i=0;i<k;i++)
32 {
33 scanf("%I64d %I64d",&x,&y);
34 bb[cnt++]=x;
35 bb[cnt++]=y;
36 }
37 for(i=0;i<cnt;i++)
38 {
39 aa[i].x=bb[i];
40 aa[i].y=i;
41 }
42 qsort(aa,cnt,sizeof(ss),cmp);
43 cc[0]=0;LL ans=0;
44 for(i=1;i<cnt;i++)
45 {
46 if(aa[i].x!=aa[i-1].x)
47 ans++;
48 cc[aa[i].y]=ans;
49 }LL uu=0;
50 for(i=0;i<cnt;i++)
51 {
52 if(i%2==0)
53 {
54 ak[uu].x=cc[i];
55 }
56 else {ak[uu].y=cc[i];uu++;}
57 }LL rns=0;LL bbq=1;
58 for(i=0;i<uu;i++)
59 {P l;l.first=ak[i].x;l.second=ak[i].y;
60 if(my[l]==0)
61 {
62 my[l]=bbq++;
63 }
64 }for(i=0;i<uu;i++)
65 {P l;l.first=ak[i].x;l.second=ak[i].y;
66 vv[my[l]]++;
67 }
68 LL an=0;
69 for(i=1;i<bbq;i++)
70 {
71 if(vv[i]>=2)
72 {
73 an+=vv[i]*(vv[i]-1)/2;
74 }
75 }
76 for(i=0;i<uu;i++)
77 {
78 yy[ak[i].x]++;
79 }LL sum=0;
80 for(i=0;i<500005;i++)
81 {
82 if(yy[i]>=2)
83 {
84 sum+=yy[i]*(yy[i]-1)/2;
85 }
86 }memset(yy,0,sizeof(yy));
87 for(i=0;i<uu;i++)
88 {
89 yy[ak[i].y]++;
90 }
91 for(i=0;i<500005;i++)
92 {
93 if(yy[i]>=2)
94 {
95 sum+=yy[i]*(yy[i]-1)/2;
96 }
97 }
98 printf("%I64d\n",sum-an);
99 }
100 return 0;
101 }
102
103 int cmp(const void*p,const void*q)
104 {
105 ss*nn=(ss*)p;
106 ss*mm=(ss*)q;
107 return nn->x-mm->x;
108 }

A. Watchmen(Codeforces 650A)的更多相关文章

  1. Watchmen CodeForces - 650A

    Watchmen CodeForces - 650A Watchmen are in a danger and Doctor Manhattan together with his friend Da ...

  2. Codeforces 650A Watchmen

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

  3. (水题)Codeforces - 650A - Watchmen

    http://codeforces.com/contest/650/problem/A 一开始想了很久都没有考虑到重复点的影响,解欧拉距离和曼哈顿距离相等可以得到 $x_i=x_j$ 或 $y_i=y ...

  4. codeforces Codeforces 650A Watchmen

    题意:两点(x1,y1), (x2,y2)的曼哈顿距离=欧几里得距离 也就是:x1=x2或y1=y2,再删除重合点造成的重复计数即可. #include <stdio.h> #includ ...

  5. [刷题codeforces]650A.637A

    650A Watchmen 637A Voting for Photos 点击查看原题 650A又是一个排序去重的问题,一定要注意数据范围用long long ,而且在写计算组合函数的时候注意也要用l ...

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

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

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

  8. CodeForces 651C Watchmen map

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

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

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

随机推荐

  1. 【bfs】洛谷 P1443 马的遍历

    题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...

  2. collection映射

    讲了manyToOne和oneToMany,下面来看看get方法.在之前已经说过,如果是映射单对象,直接使用association来映射.而如果关系 是一个集合,则需要使用collection来描述. ...

  3. 一份不错的Java就业指导

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢? 本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些 ...

  4. idea2019.2安裝MybatisCodeHelper插件

    1. 下载MybatisCodeHelper插件 下载已破解的插件压缩包,一定注意校验sha1sum!!! 在IDEA中本地安装插件 激活方法(自2.7.3):IDEA顶部菜单:Tools -> ...

  5. 如何设置eclipse下查看java源码

    windows--preferences--java--installed jres --选中jre6--点击右边的edit--选中jre6/lib/rt.jar --点击右边的 source att ...

  6. BigDecimal 计算注意事项

    BigDecimal 在进行除法运算(divide)时一定要注意:如果被除数为变量,一定要指定精度 和 舍入模式,否则会报:Non-terminating decimal expansion; no ...

  7. supervise安装与使用

    确认当前是否已经安装which supervise/usr/local/bin/supervise 软件下载安装-------------------------------------------- ...

  8. Actuator监控器

    一.简介 Actuator(激励者;执行器)是Spring Boot提供的一个可挺拔模块,用于对工程进行监控.其通过不同的监控终端实现不同的监控功能.其功能与Dubbo的监控中心类似,不同的是,Dub ...

  9. SQL注入 (1) SQL注入类型介绍

    SQL注入 SQL注入介绍与分类 1. 什么是sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 2. sql注入类型 按照注入 ...

  10. 使用frp进行内网穿透,实现ssh远程访问Linux服务器

    搭建一个完整的frp服务链需要: VPS一台(也可以是具有公网IP的实体机) 访问目标设备(就是你最终要访问的设备) 简单的Linux基础(如果基于Linux配置的话) 我这里使用了腾讯云服务器作为服 ...