P1102 A-B 数对
解题思路
这道题目要求计算数组中满足A-B=C的数对个数。由于数组可能很大,我们需要高效的统计方法。
方法思路
-
哈希统计法:使用unordered_map统计每个数字出现的次数
-
数学转换:将A-B=C转换为A=B+C,统计每个数字B的B+C出现的次数
-
累加结果:遍历数组,累加每个数字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; }

浙公网安备 33010602011771号