洛谷 p1102 A-B数对

发布时间 2023-04-18 09:08:34作者: 什么时候才能不困

题目背景

出题是一件痛苦的事情!

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

题目描述

给出一串正整数数列以及一个正整数 C,要求计算出所有满足AB=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

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

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

输出格式

一行,表示该串正整数中包含的满足 AB=C 的数对的个数。

输入输出样例

输入 #1
4 1
1 1 2 3
输出 #1
3

说明/提示

对于 75% 的数据,1N2000。

对于 100% 的数据,1N2×1050ai<230,1C<230

2017/4/29 新添数据两组

题解:

我们可以统计每个数的次数,然后a-b=c,那么我们可以看出a+c=b,及找出符合规范的a和b就行了,所以代买如下:

#include<iostream>
#include<map>
using namespace std;
const int N = 10 + 1e6;
long long num[N];
int main()
{
	int n;
	int c;
	map<int,int>ma;
	cin >> n >> c;
	for (int i = 1; i <= n; i++)
	{
		cin >> num[i];
		ma[num[i]]++;//计数
	}
	long long ans = 0;
	//a-b=c
	//所以a+c=b
	for (int i = 1; i <= n; i++)
	{
		ans += ma[num[i] + c];
	}
	cout << ans;
	return 0;
}

 看数据范围就知道,平常的数组是存储不了的,所以改用map实现;

 

Good luck!