P1102 A-B 数对map

Posted jason66661010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1102 A-B 数对map相关的知识,希望对你有一定的参考价值。

题目

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

技术图片

 

 思路

使用一个map记录一样的数字出现的次数,使用另外一个map记录数字来寻找比自己大c和小c的数字

7 10 与10 7都算,最后整体除以2就行

代码

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
map<long long , long long>list;
map<long long, long long>amount;
int main()
{
    long long n, c;
    long long counts = 0;
    scanf("%lld%lld", &n, &c);
    for (int i = 1; i <=n; i++)
    {
        long long a;
        scanf("%lld", &a);
        list[a] = i;
        amount[a]++;
    }
    map<long long, long long>::iterator it = amount.begin();
    for (; it != amount.end(); it++)
    {
        if (list[it->first + c] != 0)counts += amount[it->first + c] * amount[it->first];
        if (list[it->first - c] != 0)counts += amount[it->first - c] * amount[it->first];
    }

    printf("%lld", counts/2);
}

 

以上是关于P1102 A-B 数对map的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1102 A-B数对

洛谷P1102 A-B数对

P1102 A-B 数对

A-B数对 (hash映射)

1102 A-B数对

洛谷 P2421 A-B数对(增强版)