P8196 [传智杯 #4 决赛] 三元组 ----- 数组与vector
题目描述
给定一个长度为 nn 的数列 aa,对于一个有序整数三元组 (i, j, k)(i,j,k),若其满足 1 \leq i \leq j \leq k \leq n1≤i≤j≤k≤n 并且 a_i +a_j = a_kai+aj=ak,则我们称这个三元组是「传智的」。
现在请你计算,有多少有序整数三元组是传智的。
输入格式
本题单测试点内有多组测试数据。
输入的第一行是一个整数 TT,表示数据组数。
对于每组数据:
第一行是一个整数,表示数列的长度 nn。
第二行有 nn 个整数,第 ii 个整数表示 a_iai。
输出格式
对于每组数据,输出一行一个整数表示答案。
输入输出样例
输入 #1
2 3 1 2 3 5 1 2 3 4 5
输出 #1
2 6
说明/提示
样例 1 解释
对于第一组数据,因为 a_1 + a_1 = a_2a1+a1=a2,a_1 + a_2 = a_3a1+a2=a3,故共 (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)
数据规模与约定
对于全部测试点,保证 1 \leq T \leq 1001≤T≤100,1 \leq n , a_i \leq 1001≤n,ai≤100,且各个测试点的 nn 之和不超过 100100,即 \sum n \leq 100∑n≤100。
vector:
#include <iostream> #include <string> #include <vector> using namespace std; int main() { int T; cin >> T; int n; vector<int> vec; int a; while (T--) { int count = 0; cin >> n; for (int i = 0; i < n; ++i) { cin >> a; vec.emplace_back(a); } //for (auto&& ve : vec) cout << ve << "/ "; for (int z = 0; z < n; ++z) { for (int i = z; i < n; ++i) { for (int j = i; j < n; ++j) { if (vec[z] + vec[i] == vec[j]) { count++; } } } } cout << count << endl; vec.clear(); } return 0; }
数组:
#include <iostream> #include <string> #include <vector> using namespace std; int main() { int T; cin >> T; int n; int vec[105]; int a; while (T--) { int count = 0; cin >> n; for (int i = 1; i <= n; i++) cin >> vec[i]; for (int z = 1; z <= n; ++z) for (int i = z; i <= n; ++i) for (int j = i; j <= n; ++j) if (vec[z] + vec[i] == vec[j]) count++; cout << count << endl; } return 0; }
hello my world
本文来自博客园,作者:slowlydance2me,转载请注明原文链接:https://www.cnblogs.com/slowlydance2me/p/16909514.html