P8196(洛谷题面

题目

题目描述:

给定一个长度为 nn 的数列 aa,对于一个有序整数三元组 (i,j,k)(i, j, k),若其满足 1ijkn1 \leq i \leq j \leq k \leq n 并且 ai+aj=aka_i +a_j = a_k,则我们称这个三元组是「传智的」。

现在请你计算,有多少有序整数三元组是传智的。

输入格式:

本题单测试点内有多组测试数据

输入的第一行是一个整数 TT,表示数据组数。

对于每组数据:

第一行是一个整数,表示数列的长度 nn
第二行有 nn 个整数,第 ii 个整数表示 aia_i

输出格式:

对于每组数据,输出一行一个整数表示答案。

数据范围与说明:

样例 1 解释

对于第一组数据,因为 a1+a1=a2a_1 + a_1 = a_2a1+a2=a3a_1 + a_2 = a_3,故共 (1,1,2)(1, 1, 2)(1,2,3)(1, 2, 3) 两个三元组。
对于第二组数据六个三元组分别是:

  • (1,1,2)(1, 1, 2)
  • (1,2,3)(1, 2, 3)
  • (1,3,4)(1, 3, 4)
  • (1,4,5)(1, 4, 5)
  • (2,2,4)(2, 2, 4)
  • (2,3,5)(2, 3, 5)

数据规模与约定

对于全部测试点,保证 1T1001 \leq T \leq 1001n,ai1001 \leq n , a_i \leq 100,且各个测试点的 nn 之和不超过 100100,即 n100\sum n \leq 100

输入输出样例 #1

输入:

1
2
3
4
5
2
3
1 2 3
5
1 2 3 4 5

输出:

1
2
2
6

代码

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;
}