【解题报告】洛谷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;
}
本博文为wweiyi原创,若想转载请联系作者,qq:2844938982