这里写自定义目录标题
9751 Problem J
题目描述
楠楠在网上刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈。
题目是这样的:给出N个从小到大排好序的整数,一个差值C,要求在这N个整数中找两个数A和B,使得A-B=C,问这样的方案有多少种?
例如:N=5,C=2,5个整数是:2 2 4 8 10。答案是3。具体方案:第3个数减第1个数;第3个数减第2个数;第5个数减第4个数。
输入
第一行2个正整数:N,C。
第二行N个整数:已经有序。注意:可能有相同的。
输出
一个整数,表示该串数中包含的所有满足A-B=C的数对的方案数。
样例输入 Copy
4 1
1 1 2 2
样例输出 Copy
4
#include<iostream>
#include<map>
using namespace std;
int main(void){
int N,C;
int M;
map<long long,long long> arr;
int count=0;
scanf("%d%d",&N,&C);
for(int i=0;i<N;i++){
scanf("%d",&M);
arr[M]++;
if(M-C>=0)
count+=arr[M-C];
}
printf("%d",count);
return 0;
}
解题思路:利用map存储每个数字和每个数组的个数,用N和C很容易找到要找的数,只要将找到的数对应的数量相加即可求解(很容易想到用数组求,但是时间超限)
博主分享了解决编程问题的方法,针对给定的有序整数数组,如何利用map数据结构快速找出满足A-B=C的数对,提升算法效率。讨论了使用map存储计数并遍历数组求解的解题思路。

被折叠的 条评论
为什么被折叠?



