洛谷 P1102 A-B 数对

题目描述

出题是一件痛苦的事情!

相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

好吧,题目是这样的:给出一串数以及一个数字 CC,要求计算出所有 A - B = CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

第一行,两个整数 N, CN,C。

第二行,NN 个整数,作为要求处理的那串数。

输出格式

一行,表示该串数中包含的满足 A - B = CA−B=C 的数对的个数。

输入输出样例

输入 #1复制

4 1
1 1 2 3

输出 #1复制

3

说明/提示

对于 75\%75% 的数据,1 \leq N \leq 20001≤N≤2000。

对于 100\%100% 的数据,1 \leq N \leq 2 \times 10^51≤N≤2×105。

保证所有输入数据绝对值小于 2^{30}230,且 C \ge 1C≥1。

2017/4/29 新添数据两组-> 原题

自己是用的map,开始是用双指针,怎么改都不对,看题解也有用哈希和二分什么的,反正卡在92分卡了好久

洛谷 P1102 A-B 数对_第1张图片 

不知道为什么,过程相当艰辛。。。数组开小了,循环超限,引用歧义,一堆乱七八糟的问题

下面是AC的代码:

#include
#include
using namespace std;

long long int n,c,cnt;
long long int b[200010];
map a;
int main()
{
    cin>>n>>c;
    for(long long int i=1;i<=n;i++)
    {
        cin>>b[i];
        a[b[i]]++;
    }
    
    for(long long int i=1;i<=n;i++)
    {
        cnt+=a[b[i]+c];
    }
    cout<

你可能感兴趣的:(c++)