30分,为啥
查看原帖
30分,为啥
971101
LSR120218_juruo楼主2024/9/8 20:04
#include<bits/stdc++.h>
using namespace std;

int main() {
	int n, a[100], b[10001] = {0}, c[100], ans = 0, cnt = 0;
	cin >> n;
	for(int i = 0; i < n; i++) {
		cin >> a[i];
		b[a[i]]++;
	}
	
	// 去重并填充数组 c
	for(int i = 0; i < 10001; i++) {
		if(b[i] > 0) {
			c[cnt++] = i;
		}
	}
	
	// 对数组 c 进行排序
	sort(c, c + cnt);
	
	// 使用双指针法寻找三元组
	for(int i = 0; i < cnt - 2; i++) {
		int k = i + 2; // 第三个数至少要在第二个数的后面
		for(int j = i + 1; j < cnt - 1; j++) {
			// 移动 k,直到找到一个数等于 c[i] + c[j] 或者 k 超出范围
			while(k < cnt && c[k] < c[i] + c[j]) {
				k++;
			}
			if(k < cnt && c[k] == c[i] + c[j]) {
				ans++;
			}
		}
	}
	
	cout << ans << endl;
	return 0;
}

2024/9/8 20:04
加载中...