开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
[传智杯 #4 决赛] 三元组
题目描述
给定一个长度为 的数列 ,对于一个有序整数三元组 ,若其满足 并且 ,则我们称这个三元组是「传智的」。
现在请你计算,有多少有序整数三元组是传智的。
输入格式
本题单测试点内有多组测试数据。
输入的第一行是一个整数 ,表示数据组数。
对于每组数据:
第一行是一个整数,表示数列的长度 。
第二行有 个整数,第 个整数表示 。
输出格式
对于每组数据,输出一行一个整数表示答案。
样例 #1
样例输入 #1
2
3
1 2 3
5
1 2 3 4 5
样例输出 #1
2
6
提示
样例 1 解释
对于第一组数据,因为 ,,故共 和 两个三元组。
对于第二组数据六个三元组分别是:
数据规模与约定
对于全部测试点,保证 ,,且各个测试点的 之和不超过 ,即 。
思路分析
- 刚开始看到这道题,感觉就是题目很好理解,但是不是特别好下手
- 但是看到测试数据(组数)仅仅只有100,而且数组最多就只需要开100,也就是说暴力枚举的话,粗略计算只有十的八次方,而且三维循环并不是是的六次方,是一个三角形的,也就是说是2乘十的五次方,总的来说直接暴力结束
- 在全局变量开个105的数组即可
- 每次三维循环前有一个重新赋零值的sum来做计数器
代码展示
#include<iostream>
using namespace std;
int a[105];
int main()
{
int t;//组数
cin >> t;
while (t--) {
int n;
cin >> n;
//存储数据
for (int i = 1; i <= n; i++)cin >> a[i];
int sum = 0;
//暴力枚举
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
for (int k = j; k <= n; k++) {
if (a[i] + a[j] == a[k])
sum++;
}
}
}
cout << sum << endl;
}
}
结果
PS:这只是第四题,难度其实还是没上来,在洛谷评级仅仅是入门~