P1102 A-B 数对

解题思路

这道题目要求计算数组中满足A-B=C的数对个数。由于数组可能很大,我们需要高效的统计方法。

方法思路

  1. 哈希统计法:使用unordered_map统计每个数字出现的次数

  2. 数学转换:将A-B=C转换为A=B+C,统计每个数字B的B+C出现的次数

  3. 累加结果:遍历数组,累加每个数字B对应的B+C的出现次数

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;  // 定义long long类型别名,防止大数溢出

map<ll, ll> cnt;  // 使用map统计数字出现次数,查找效率O(1)

int main() {
    ll n, c, ans = 0;  // n-数字个数,c-目标差值,ans-结果计数器
    cin >> n >> c;  // 读取n和c
    
    vector<ll> nums(n);  // 存储数字的数组
    
    // 第一次遍历:统计每个数字出现次数
    for(int i = 0; i < n; i++) {
        cin >> nums[i];  // 读取当前数字
        cnt[nums[i]]++;  // 在map中增加该数字的计数
    }
    
    // 第二次遍历:计算满足条件的数对
    for(int i = 0; i < n; i++) {
        ans += cnt[nums[i] + c];  // 累加B+C出现的次数
    }
    
    cout << ans;  // 输出结果
    return 0;
}

 

posted @ 2025-05-20 17:32  CRt0729  阅读(58)  评论(0)    收藏  举报