【解题报告】洛谷P1102 A-B数对

【解题报告】洛谷P1102 A-B数对

题目链接

https://www.luogu.com.cn/problem/P1102

思路

我们可以统计数列中每个数字的数量,记录到 \(cnt[b[i]]\) 中,作为B

我们把 \(A-B=C\) 变换一下,就变成了 \(B+C=A\)

所以我们对于之前统计的东西直接 \(cnt[b[i]+c]\) ,这个东西直接累加到答案中就可以了

由于值域太大,我们使用一个 stl::map

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
int n,c;
map<int,int> cnt;
long long a[2000005];
long long ans;
int main()
{
	cin>>n>>c;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		cnt[a[i]]++;
	}
	for(int i=1;i<=n;i++)
	ans+=cnt[a[i]+c];
	cout<<ans<<endl;
	return 0;
}
posted @ 2021-10-11 20:38  wweiyi  阅读(20)  评论(0编辑  收藏  举报
js脚本