【CodeForces - 651C 】Watchmen(map)

Watchmen

直接上中文

Descriptions:

钟表匠们的好基友马医生和蛋蛋现在要执行拯救表匠们的任务。在平面内一共有n个表匠,第i个表匠的位置为(xi, yi).

他们需要安排一个任务计划,但是确发现了一些问题很难解决。马医生从第i个表匠到第j个表匠所需要的时间为|xi - xj| + |yi - yj|。然而蛋蛋所需要的时间为

要想成功完成任务,必须保证两人从第i个表匠出发,同时到达第j个表匠。现在请你计算最多有多少组表匠的位置满足条件

Input

第一行只有一个数n( 1 ≤ n ≤ 200 000) )——代表表匠的数量。

接下来n行,每行两个数xi , yi (|xi|, |yi| ≤ 109).

一些表匠可能位置相同。

Output

输出满足条件的位置的组数。

Examples

Input

31 17 51 5

Output

2

Input

60 00 10 2-1 10 11 1

Output

11

Hint

在第一组样例中,马医生从1号走到2号需要的时间为|1 - 7| + |1 - 5| = 10,而蛋蛋需要的时间为

时间不同,然而从1号走到3号,通过同样的方法计算得到马医生和蛋蛋所用的时间相同,均为4;同理从2号到3号也是这样。因此,一共有2组满足题意的位置。

题目链接:
https://vjudge.net/problem/CodeForces-651C

这题有点水吧,用map直接求前一个数有多少的重复的(x),后一个数有几个重复的(y),整体有几个数重复的(z)。让后(x*(x-1)+y*(y-1)+z*(z-1))/2就OK了,是个公式题吧,不明白的小伙伴动手比划比划就知道。

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
map<ll,ll> num1;//前一个数x
map<ll,ll> num2;//后一个数y
map<pair<ll,ll>,ll>same;//整体z
map<ll,ll>::iterator it1;
map<pair<ll,ll>,ll>::iterator it2;
ll sum,n,x,y;
int main()
{
    sum=0;
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cin>>x>>y;
        //查重,看看有多少重复
        num1[x]++;
        num2[y]++;
        same[make_pair(x,y)]++;
    }
    //开始计算
    for(it1=num1.begin();it1!=num1.end();it1++)
    {
        ll t=it1->second;
        sum+=t*(t-1)/2;
    }
    for(it1=num2.begin();it1!=num2.end();it1++)
    {
        ll t=it1->second;
        sum+=t*(t-1)/2;
    }
    for(it2=same.begin();it2!=same.end();it2++)
    {
        ll t=it2->second;
        sum-=t*(t-1)/2;
    }
    cout<<sum<<endl;
}

原文地址:https://www.cnblogs.com/sky-stars/p/10995057.html

时间: 2024-10-13 21:46:25

【CodeForces - 651C 】Watchmen(map)的相关文章

【HDOJ 5838】Mountain(局部极小值)

[HDOJ 5838]Mountain(局部极小值) Mountain Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Zhu found a map which is a N * M rectangular grid.Each cell has a height and there are no two cells which have

【POJ 3071】 Football(DP)

[POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted: 2222 Description Consider a single-elimination football tournament involving 2n teams, denoted 1, 2, -, 2n. In each round of the tournament, all tea

【POJ 3034】 Whac-a-Mole(DP)

[POJ 3034] Whac-a-Mole(DP) Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3621   Accepted: 1070 Description While visiting a traveling fun fair you suddenly have an urge to break the high score in the Whac-a-Mole game. The goal of the W

【初识Spring】对象(Bean)实例化及属性注入(xml方式)

title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- ?#初识Spring之Bean实例化及属性注入 1.通过xml配置的方式进行实例化. 配置文件中bean标签的常用属性 通过无参构造(常用) 使用静态工厂进行创建 使用实例工厂进行创建 2.属性注入. 使用有参数构造方法注入属性 使用set方法注入属性(常用) 注入对象类型属性 注入复杂类型属性 xml配置的

【Hibernate学习】 ——ORM(三)

前面几种关系我们以前就经常用,对于继承我们也并不陌生,经常接触的类与类之间的继承用extends关键字,那么在表与表的关系中如何表示呢?下面我们来讲继承映射. 继承有三种实现的策略,单表继承,具体表继承,类表继承.下面来分析一下这三种方式 继承关联类关系  单表继承 每棵类继承树使用一个表,可知,这三个类在一张表中.如下表: 这张表包括了父类,子类的所有属性,通过Type来区分是哪个子类. 对象模型映射到关系模型: <classname="com.bjpowernode.hibernat.

【Hibernate学习】 ——ORM(一)

Hibernate是一种能实现ORM的框架.ORM即Object Relational Mapping,对象关系映射.也就是将关系数据库中表的数据映射成为对象,也就是说将表与表之间的操作映射成对象与对象之间的操作,通过实体类来达到操作表的目的.总之就是把对数据库的操作转化为对对象的操作,从而更体现了面向对象的思想. 一对一关联映射策略包括主键关联和唯一外键关联. 单向一对一 主键关联 让两个对象有相同的主键值,表名它们之间的一对一关系,数据库没有额外的字段来维护它们之间的关系,仅仅通过表的主键来

【Hibernate学习】 ——ORM(二)

上篇博客主要介绍了一对一的关系,主要理解单向与双向的区别,主键关联与唯一外键关联的区别.下面继续介绍一对多与多对多关联. 一对多关联映射 一个班级对应多个学生 单向一对多关系 关系表: classes代码 <classname="com.bjpowernode.hibernat.Classes"table="t_classes"> <idname="id"> <generatorclass="native&

【UOJ#246】套路(动态规划)

[UOJ#246]套路(动态规划) 题面 UOJ 题解 假如答案的选择的区间长度很小,我们可以做一个暴力\(dp\)计算\(s(l,r)\),即\(s(l,r)=min(s(l+1,r),s(l,r-1),abs(a_r-a_l))\). 我们发现\(s(l,r)\le \frac{m}{r-l+1}\),那么当长度足够大的时候\(s(l,r)\)的取值很小. 所以我们对于询问分治处理,当长度小于\(\sqrt m\)时,直接\(dp\)计算贡献. 否则,当长度大于\(\sqrt m\)时,枚举

【UOJ#22】【UR #1】外星人(动态规划)

[UOJ#22][UR #1]外星人(动态规划) 题面 UOJ 题解 一道简单题? 不难发现只有按照从大往小排序的顺序选择的才有意义,否则先选择一个小数再去模一个大数是没有意义的. 设\(f[i][j]\)表示考虑了前\(i\)个数,模完之后是\(j\)的方案数. 转移的时候枚举这个数是模还是不模,如果不模的话就要把它放到后面某个小数的后面,方案数是\(n-i\). #include<iostream> #include<cstdio> #include<cstdlib>