codeforces Codeforces 650A Watchmen

题意:两点(x1,y1), (x2,y2)的曼哈顿距离=欧几里得距离

也就是:x1=x2或y1=y2,再删除重合点造成的重复计数即可。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <queue>
 7 #include <set>
 8 #include <map>
 9 #include <cstring>
10 #include <math.h>
11 #include <stdlib.h>
12 #include <time.h>
13 #include <stack>
14 #define clc(a,b) memset(a,b,sizeof(a))
15 #define LL long long
16 using namespace std;
17 const int maxn=200020;
18 const int inf=0x3f3f3f3f;
19 struct node{
20     LL x,y;
21 }a[maxn];
22 bool cmp1(node a,node b){
23      if(a.x==b.x) return a.y<b.y;
24      return a.x<b.x;
25 }
26
27 bool cmp2(node a,node b){
28     if(a.y==b.y) return a.x<b.x;
29     return a.y<b.y;
30 }
31
32 int n;
33 // int a[maxn],b[maxn];
34 int main(){
35     scanf("%d",&n);
36     LL sum=0;
37     for(int i=0;i<n;i++){
38         scanf("%I64d%I64d",&a[i].x,&a[i].y);
39     }
40     sort(a,a+n,cmp1);
41     LL sum1=0;
42     for(int i=0;i<n;i++){
43         int j=i;
44         sum1=0;
45         while(j<n&&a[i].x==a[j].x){
46             sum1++;
47             j++;
48         }
49         i=j-1;
50         sum+=sum1*(sum1-1)/2;
51     }
52     sort(a,a+n,cmp2);
53     sum1=0;
54     for(int i=0;i<n;i++){
55         int j=i;
56         sum1=0;
57         while(j<n&&a[i].y==a[j].y){
58             sum1++;
59             j++;
60         }
61         i=j-1;
62         sum+=sum1*(sum1-1)/2;
63     }
64     sum1=0;
65     for(int i=0;i<n;i++){
66         int j=i;
67         sum1=0;
68         while(j<n&&a[i].y==a[j].y&&a[j].x==a[i].x){
69             sum1++;
70             j++;
71         }
72         i=j-1;
73         sum-=sum1*(sum1-1)/2;
74     }
75     printf("%I64d\n",sum);
76     return 0;
77 }

时间: 2024-10-10 15:27:41

codeforces Codeforces 650A Watchmen的相关文章

Codeforces Codeforces Round #484 (Div. 2) E. Billiard

Codeforces Codeforces Round #484 (Div. 2) E. Billiard 题目连接: http://codeforces.com/contest/982/problem/E Description Consider a billiard table of rectangular size $n \times m$ with four pockets. Let's introduce a coordinate system with the origin at t

Codeforces Codeforces Round #484 (Div. 2) D. Shark

Codeforces Codeforces Round #484 (Div. 2) D. Shark 题目连接: http://codeforces.com/contest/982/problem/D Description For long time scientists study the behavior of sharks. Sharks, as many other species, alternate short movements in a certain location and

CodeForces 650A Watchmen

两种距离相等,必然是在一条竖直线上或者一条水平线上.重复的再减一下即可. #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <vector> #include <queue> #include <set> #include <map> #include <string> #incl

[2016-03-08][codeforces][651][C][Watchmen]

时间:2016-03-08 23:29:35 星期二 题目编号:CF 651 C. Watchmen 题目大意: 给定n个点,求n个点有多少对点使得 |x1 - x2| + |y1 - y2| = ((x1 - x2)^2 + (y1 - y2)^2)^0.5 输入:n n对点 输出:对数 分析: 如果两个点x,y坐标都不一样,那么前者是直角三角形两边之和,后者是三角形的第三条变,所以,满足上式当且仅当两个点x坐标或者y坐标一样 方法: 根据分析,问题等价于求n个点中,有几对点x坐标或者y坐标相

【CodeForces - 651C 】Watchmen(map)

Watchmen 直接上中文 Descriptions: 钟表匠们的好基友马医生和蛋蛋现在要执行拯救表匠们的任务.在平面内一共有n个表匠,第i个表匠的位置为(xi, yi). 他们需要安排一个任务计划,但是确发现了一些问题很难解决.马医生从第i个表匠到第j个表匠所需要的时间为|xi - xj| + |yi - yj|.然而蛋蛋所需要的时间为 要想成功完成任务,必须保证两人从第i个表匠出发,同时到达第j个表匠.现在请你计算最多有多少组表匠的位置满足条件 Input 第一行只有一个数n( 1 ≤ n

codeforces Codeforces Round #380 (Div. 1, Rated, Based on Technocup 2017 - Elimination Round 2)// 二分的题目硬生生想出来ON的算法

A. Road to Cinema 很明显满足二分性质的题目. 题意:某人在起点处,到终点的距离为s. 汽车租赁公司提供n中车型,每种车型有属性ci(租车费用),vi(油箱容量). 车子有两种前进方式 :①. 慢速:1km消耗1L汽油,花费2分钟. ②.快速:1km消耗2L汽油,花费1分钟. 路上有k个加油站,加油不需要花费时间,且直接给油箱加满. 问在t分钟内到达终点的最小花费是多少?(租车子的费用)  若无法到达终点,输出-1 不谈二分的写法.. 我们考虑离散化可修改的点  和限制的点位置

[CodeForces]CodeForces - 13D 几何 思维

大致题意: 给出N个红点和M个蓝点,问可以有多少个红点构成的三角形,其内部不含有蓝点 假设我们现在枚举了一条线段(p[i],p[j]),我们可以记录线段下方满足(min(p[i].x,p[j].x)<x<=max(p[i].x,p[j].x) 的数量  时间复杂度为O(N*N*M) 那么我们就可以枚举三角形O(1)判断三角形内有无红点. 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4

[Codeforces]Codeforces Global Round 1

A - Parity 题意 给定一个$b$进制数,要求输出它在十进制下是奇数还是偶数. 分析 花了我略多的时间,首先题目中给的数字范围很大,不能直接转化为10进制. 分析性质,发现只有奇数乘奇数还是奇数,其他都是偶数. 对奇数进制和偶数进制分类讨论. 偶数进制看最低位的奇偶性,如果是奇数那么这个数就是奇数,不然是偶数. 奇数进制看每一位上奇数的个数,如果是奇数个奇数就是奇数,不然是偶数. 代码 1 #include <bits/stdc++.h> 2 using namespace std;

[codeforces]Codeforces Global Round 1 F. Nearest Leaf

题解:  语文题????  上面说的一段代码 告诉你的是  节点编号顺序与dfs序顺序一致  也就是你  dfs序以后编号就是[1,n]  根据这个特性  那么我们只需要维护每个叶子节点到查询v的距离即可  那么我们只需要离线所有查询 然后对子树修改即可   用线段树来维护区间加和区间最小值就行 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #inc