P1102 A-B 数对,map如何使用(小白向

· · 个人记录

一开始我不会用map,然后上博客上查,发现大多数写的太过于复杂化,学术化,像我这样的蒟蒻根本看不懂,之后问了学长才明白,我感觉对于我这种新手不需要知道它的原理(好像知道也没用,关键看不懂),所以下边是map函数最简单的描述,只包含了如何浅浅的用,已达到会用的目的

map函数在#include<map>里边其实不用记,万能头就好

map如何定义?

map<下标的类型,存储的数据的类型> a(a是数组的名字,随你定);

比如说,你要定义一个字符串为下标的存储整形的map,就要这样定义:

map<string,int> a;

如何调用?

a["sadas"]++;这样就完成了,这时a中“sadad”下标加了一,当然,可以以long long为下标,这样就可以当一个超级桶了,比如说可以a[999999999999]++; 非常流批

时间复杂度

插入: O(logN)

查看:O(logN) 所以能用普通桶就用普通桶,logN其实不算太多,而且这玩意写起来比二分简单时间差不多

总结

map你可以把他当做一个下标自由的桶来用,时间复杂度是logN

代码实现

其实我的主要目的是说map怎么用,你可以完全看题解讲的都比我好,但是为了完整性,我还是贴上了,你可以看看参考参考

#include<bits/stdc++.h>
using namespace std;
map<long long ,long long> b;
long long sum,n,c,a[2000001];
int main(){
cin>>n>>c;
for(int i=1;i<=n;i++)  cin>>a[i],b[a[i]]++;
for(int i=1;i<=n;i++){
    sum+=b[c+a[i]];//如果没有的话加0等于没加
}       
cout<<sum;
}