CF650A Watchmen(STL+map)
CF650A Watchmen
只有三个map的一篇题解
1. 手推公式
\(|x2-x1|+|y2-y1|=\sqrt{(x2-x1)^2+(y2-y1)^2}\)
设|x2-x1|=a,|y2-y1|=b
\(a+b=\sqrt{a^2+b^2}\)
\((a+b)^2=a^2+b^2\)
\(a^2+2ab+b^2=a^2+b^2\)
\(2ab=0\)
\(ab=0\)
\(|x2-x1|*|y2-y1|=0\)
\(|x2-x1|=0\:\:or\:\:|y2-y1|=0\)
\(x1=x2\:\:or\:\:y1=y2\)
2.算法
由公式可知,横纵坐标二选一相同时,两点符合要求
坐标值域很大,可以直接上map
X[]存某行出现过点数,Y[]存某列出现过的点数,p[][]存某个坐标出现过的点数
X[x]+Y[y]-p[x][y]就是答案
3.优化
众所周知,map复杂度是log级的,而unordered_map是O(1)的
所以对于两个下标是int的我们可以用unordered_map代替
4.补充
make_pair(x,y)的意思是将x,y搞成一个pair<,>型东西
以下两段代码等价:
a=make_pair(x,y);
a.first=x;
a.second=y;
(tips.因为CF的c++版本很高,所以要去掉斜杠那两句话,但NOIP中要加上)
#include <bits/stdc++.h>
//#include <tr1/unordered_map>
//using namespace std::tr1;
using namespace std;
unordered_map<int,int> X,Y;
map<pair<int,int>,int> p;
long long ans; //答案会爆int
int n;
signed main(){
scanf("%d",&n);
for(int i=1,x,y;i<=n;i++){
scanf("%d%d",&x,&y);
ans+=X[x]+Y[y]-p[make_pair(x,y)];
X[x]++;
Y[y]++;
p[make_pair(x,y)]++;
}
printf("%I64d",ans);
}
CF650A Watchmen(STL+map)的更多相关文章
- stl::map之const函数访问
如何在const成员数中访问stl::map呢?例如如下代码: string ConfigFileManager::MapQueryItem(const string& name) const ...
- hdu4941 Magical Forest (stl map)
2014多校7最水的题 Magical Forest Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit ...
- [CareerCup] 13.2 Compare Hash Table and STL Map 比较哈希表和Map
13.2 Compare and contrast a hash table and an STL map. How is a hash table implemented? If the numbe ...
- STL MAP及字典树在关键字统计中的性能分析
转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...
- POJ 3096 Surprising Strings(STL map string set vector)
题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...
- STL MAP 反序迭代
ITS_NOTICE_MAP::reverse_iterator it = noticeMap.rbegin(); for ( ; it != noticeMap.rend(); ++it ) { I ...
- 泛型Binary Search Tree实现,And和STL map比较的经营业绩
问题叙述性说明: 1.binary search tree它是一种二进制树的.对于key值.比当前节点左孩子少大于右子. 2.binary search tree不是自平衡树.所以,当插入数据不是非常 ...
- Dictionary,hashtable, stl:map有什么异同?
相同点:字典和map都是泛型,而hashtable不是泛型. 不同点:三者算法都不相同 Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高, ...
- STL Map和multimap 容器
STL Map和multimap 容器 map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供 基于key的快速检索能力. ...
随机推荐
- QT之QChar
QChar 类是 Qt 中用于表示一个字符的类,实现在 QtCore 共享库中.QChar 类内部用2个字节的Unicode编码来表示一个字符. Qchar构造函数: QChar ch=QChar() ...
- C# 扩展方法——序列化与反序列化
其他扩展方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html 主要是是对日期格式的处理 using Newtonsoft.Json; using ...
- python 正则表达式实例
字符匹配 实例 描述 python 匹配 "python". 字符类 实例 描述 [Pp]ython 匹配 "Python" 或 "python&qu ...
- luoguP2285 [HNOI2004]打鼹鼠 x
P2285 [HNOI2004]打鼹鼠 题目描述 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某 ...
- 利用gephi作人物网络图
一.先利用word2vec训练数据得到模型 a.利用jieba对文本进行分词,并只提取词性为人名的词,去除分词长度为1和大于4的词 b.利用word2vec训练分词后的文本,并存储 c.利用训练后的模 ...
- C++11 中的强类型枚举
// C++11之前的enum类型是继承C的,不温不火: // C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮 // 使用过QT 的都知道,早就应该这么做了,用的很爽!! ...
- Linux安装并使用Ludwig训练模型
一.在Python3环境安装Ludwig: 1.使用pip安装:pip install ludwig 2.源码编译安装: git clone git@github.com:uber/ludwig.gi ...
- idea为项目添加ignore文件忽略unversion的文件
最近初学Git,而且在使用的IDE是IntelliJ IDEA,发现IDEA在提交项目到本地仓库的时候,会把.idea文件夹中的内容也提交上去,这里面放的是一些项目的配置信息,包括历史记录,版本控制信 ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)基于wsgi运行的框架有 ...
- ZooKeeper java例子解读
转载链接:https://blog.csdn.net/liyiming2017/article/details/83276706 需求理解我们先回顾一下例子的需求,此客户端有如下四个需求: 1.它接收 ...