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)的更多相关文章

  1. stl::map之const函数访问

    如何在const成员数中访问stl::map呢?例如如下代码: string ConfigFileManager::MapQueryItem(const string& name) const ...

  2. hdu4941 Magical Forest (stl map)

    2014多校7最水的题   Magical Forest Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit ...

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

  4. STL MAP及字典树在关键字统计中的性能分析

    转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...

  5. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

  6. STL MAP 反序迭代

    ITS_NOTICE_MAP::reverse_iterator it = noticeMap.rbegin(); for ( ; it != noticeMap.rend(); ++it ) { I ...

  7. 泛型Binary Search Tree实现,And和STL map比较的经营业绩

    问题叙述性说明: 1.binary search tree它是一种二进制树的.对于key值.比当前节点左孩子少大于右子. 2.binary search tree不是自平衡树.所以,当插入数据不是非常 ...

  8. Dictionary,hashtable, stl:map有什么异同?

    相同点:字典和map都是泛型,而hashtable不是泛型. 不同点:三者算法都不相同 Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高, ...

  9. STL Map和multimap 容器

    STL Map和multimap 容器 map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供 基于key的快速检索能力.       ...

随机推荐

  1. 【leetcode】1233. Remove Sub-Folders from the Filesystem

    题目如下: Given a list of folders, remove all sub-folders in those folders and return in any order the f ...

  2. Python 面向对象Ⅲ

    Python内置类属性 __dict__ : 类的属性(包含一个字典,由类的数据属性组成) __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块http ...

  3. cgi 检索Cookie信息

    Cookie信息检索页非常简单,Cookie信息存储在CGI的环境变量HTTP_COOKIE中,存储格式如下: key1=value1;key2=value2;key3=value3.... 以下是一 ...

  4. 51 Nod 阶乘后面0的数量

    1003 阶乘后面0的数量  基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 72 ...

  5. TTTTTTTTTTTTTTTTTTT CF 银行转账 图论 智商题

    C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  6. 【IOI2018】组合动作

    还是自己水平不够,想了两天没想出来--(然后我就被其他人吊打了) 这种题目看了题解就秒会,自己想就想不出来-- 下面是我的心路历程(我就在想出来又叉掉的不断循环中度过--) 开始把题目看成了查询限制 ...

  7. C++11 中的强类型枚举

    // C++11之前的enum类型是继承C的,不温不火: // C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮 // 使用过QT 的都知道,早就应该这么做了,用的很爽!! ...

  8. HDU1176-免费馅饼(DP)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. java通讯录获取汉字首字母

    1.本文只是使用了pinyin4J的主要功能,还有更多更好耍的功能,大家可以去研究官网文档.哈哈 2.pinyin4j的官方下载地址:https://sourceforge.net/projects/ ...

  10. springboot 使用redis

    安装redis教程:https://www.cnblogs.com/nongzihong/p/10190489.html 依赖: <!--配置redis--> <dependency ...