#include "triples.h"
#include <set>
using namespace std;
long long count_triples(std::vector<int> H) {
long long ans = 0;
int n = H.size();
auto f = [&H, &n] (const int& i, const int& j, const int& k) -> int {
if (!(j > i && k > j && j < n && k < n))
return 0;
multiset<int> a;
a.insert(j - i); a.insert(k - i); a.insert(k - j);
for (int x : {H[i], H[j], H[k]}) {
auto it = a.find(x);
if (it == a.end()) return 0;
a.erase(it);
}
return 1;
};
for (int i = 0; i < n; i++) {
int h_i = H[i];
if (i + h_i < n) {
//case 1
for (int k = i + h_i + 1; k < n; k++)
ans += f(i, i + h_i, k);
//case 2
for (int j = i + 1; j < i + h_i; j++)
ans += f(i, j, i + h_i);
// case 3
for (int j = i + 1; j < n; j++)
if (j != i + h_i && j + h_i != i + h_i)
ans += f(i, j, j + h_i);
}
}
return ans;
}
std::vector<int> construct_range(int M, int K) {
return {1, 1, 1};
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |