题解
2025-07-09 11:30:06
发布于:广东
3阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n; // 读取数列长度
int a[n];
for(int i = 0; i < n; i++) cin >> a[i]; // 读取数列元素
unordered_set<int> x; // 存储所有已处理过的元素
unordered_set<int> xx; // 存储所有已处理过的元素对的和
int cnt = 0; // 好数计数器
// 遍历数列中的每个元素
for(int i = 0; i < n; i++){
// 检查当前元素a[i]是否为好数
for(int j = 0; j < i; j++){
// 若存在k使得a[i] - a[j] == k(即a[j] + k == a[i]),且k是之前某两个元素的和
if(xx.find(a[i] - a[j]) != xx.end()){
cnt++; // 找到一个好数
break; // 每个元素只计数一次
}
}
// 将当前元素加入已处理元素集合
x.insert(a[i]);
// 更新元素对的和集合:将当前元素与之前所有元素的和加入xx
for(auto k : x){
xx.insert(k + a[i]);
}
}
cout << cnt; // 输出好数的总数
return 0;
}
这里空空如也
有帮助,赞一个