当前位置: 移动技术网 > 移动技术>移动开发>Android > 18728 数对问题二

18728 数对问题二

2020年07月09日  | 移动技术网移动技术  | 我要评论

时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0

题型: 编程题 语言: 不限定
Description
此题目与数对问题一的唯一区别为序列中元素的取值范围。
一个长度为N的正整数序列,现在需要计算出有多少对数字的差的绝对值为C。
注意只要位置不同就认为是不相同的数对。

输入格式
第一行,两个整数 N, C。(1=<N<=10000),(1=<C<=10000)
第二行,N个正整数a1…an。 ai为int范围内的正整数。

输出格式
仅一行,满足条件的数对的个数。

输入样例
4 1
1 2 3 1

输出样例
3

提示
(a1,a2),(a2,a3),(a2,a4)共3个数对满足条件。

分析:

这道题可以用哈希表做,但如果用stl的map容器做会更容易,相当于一个动态的二维计数数组,简单粗暴。

代码:

#include <iostream>
#include <map>
using namespace std;
int main(void)
{
	ios::sync_with_stdio(0),cin.tie(0);
	int i,j,k,sum=0,a[20010],n,c;
	cin>>n>>c;
	map<int,int>mp;
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
		mp[a[i]]++;
	}
	for(i=1;i<=n;i++)
	{
		sum+=mp[a[i]+c];
		sum+=mp[a[i]-c];
	}
	cout<<sum/2;
	return 0;
} 

本文地址:https://blog.csdn.net/remakeprogramer/article/details/107168225

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网