题目
题目描述:
给定一个长度为 n 的数列 a,对于一个有序整数三元组 (i,j,k),若其满足 1≤i≤j≤k≤n 并且 ai+aj=ak,则我们称这个三元组是「传智的」。
现在请你计算,有多少有序整数三元组是传智的。
输入格式:
本题单测试点内有多组测试数据。
输入的第一行是一个整数 T,表示数据组数。
对于每组数据:
第一行是一个整数,表示数列的长度 n。
第二行有 n 个整数,第 i 个整数表示 ai。
输出格式:
对于每组数据,输出一行一个整数表示答案。
数据范围与说明:
样例 1 解释
对于第一组数据,因为 a1+a1=a2,a1+a2=a3,故共 (1,1,2) 和 (1,2,3) 两个三元组。
对于第二组数据六个三元组分别是:
- (1,1,2)
- (1,2,3)
- (1,3,4)
- (1,4,5)
- (2,2,4)
- (2,3,5)
数据规模与约定
对于全部测试点,保证 1≤T≤100,1≤n,ai≤100,且各个测试点的 n 之和不超过 100,即 ∑n≤100。
输入输出样例 #1
输入:
输出:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> PLL; int a[105]; void solve() { int n,cnt=0; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } 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]){ cnt++; } } } } cout<<cnt<<endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; cin >> t; while (t--) { solve(); } return 0; }
|