# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1251911 | Semicolon | Triple Peaks (IOI25_triples) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll count_triples(const vector<int>& H) {
int N = H.size();
ll ans = 0;
// Permutation 1: (H[i], H[j], H[k]) = (d(i,j), d(j,k), d(i,k))
// j = i + H[i]; k = j + H[j]; check H[k] == H[i] + H[j]
for (int i = 0; i < N; i++) {
int j = i + H[i];
if (j < N) {
int k = j + H[j];
if (k < N && H[k] == H[i] + H[j])
ans++;
}
}
// Permutation 2: (H[i],H[j],H[k]) = (d(i,j), d(i,k), d(j,k))
// j = i + H[i]; k = i + H[j]; check H[k] == H[j] - H[i]
for (int i = 0; i < N; i++) {
int j = i + H[i];
if (j < N) {
int k = i + H[j];
if (k < N && H[k] == H[j] - H[i])
ans++;
}
}
// Permutation 3: (H[i],H[j],H[k]) = (d(j,k), d(i,j), d(i,k))
// i = j - H[j]; k = j + H[i]; check H[k] == H[i] + H[j]
for (int j = 0; j < N; j++) {
int i = j - H[j];
if (i >= 0) {
int k = j + H[i];
if (k < N && H[k] == H[i] + H[j])
ans++;
}
}
// Permutation 4: (H[i],H[j],H[k]) = (d(j,k), d(i,k), d(i,j))
// i = j - H[j]; k = i + H[j]; check H[i] == H[j] + H[k]
for (int j = 0; j < N; j++) {
int i = j - H[j];
if (i >= 0) {
int k = i + H[j];
if (k < N && H[i] == H[j] + H[k])
ans++;
}
}
// Permutation 5: (H[i],H[j],H[k]) = (d(i,k), d(i,j), d(j,k))
// k = i + H[i]; j = i + H[k]; check H[j] == H[i] + H[k]
for (int i = 0; i < N; i++) {
int k = i + H[i];
if (k < N) {
int j = i + H[k];
if (j < N && H[j] == H[i] + H[k])
ans++;
}
}
// Permutation 6: (H[i],H[j],H[k]) = (d(i,k), d(j,k), d(i,j))
// k = i + H[i]; j = k - H[j]; check H[i] == H[j] + H[k]
for (int i = 0; i < N; i++) {
int k = i + H[i];
if (k < N) {
int j = k - H[k];
if (j > i && j < N && H[i] == H[j] + H[k])
ans++;
}
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
if (!(cin >> t)) return 0;
if (t == 1) {
int N;
cin >> N;
vector<int> H(N);
for (int i = 0; i < N; i++)
cin >> H[i];
cout << count_triples(H) << "\n";
} else {
// Phần II: bạn sẽ viết tương tự, chỉ khác là xuất ra dãy H
// theo chuẩn mà bài yêu cầu.
}
return 0;
}