# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1250608 | haiphong5g0 | Triple Peaks (IOI25_triples) | C++20 | 0 ms | 0 KiB |
//#include "triplepeaks.h"
#include <bits/stdc++.h>
#define task "TEST"
#define task2 "A"
#define pl pair<ll, ll>
#define pf push_front
#define pb push_back
#define pob pop_back
#define pof pop_front
#define mp make_pair
#define fi first
#define se second
#define FOR(i, a, b, c) for (int i=a; i<=b; i+=c)
#define FORE(i, a, b, c) for (int i=a; i>=b; i+=c)
using namespace std;
using ll = long long;
using ull = unsigned long long;
const int Mod = 998244353;
const int maxn = 1e3;
const ll Inf = 1e16;
ll n;
ll Check(ll i, ll j, ll k, vector<int>& H) {
if (j < i or k < j) return 0;
if (i < 0 or k >= n) return 0;
multiset<int> a, b;
a.insert({k-i, j-i, k-j});
b.insert({H[i], H[j], H[k]});
//if (a == b) cout << i << " " << j << " " << k << '\n';
return (a == b);
}
ll doubles(ll i, ll j, vector<int>& H) {
ll v = abs(j-i);
ll a = min(H[i], H[j]), b = max(H[i], H[j]);
if (v != H[i] and v != H[j])
return Check(i, j, j + a, H) + Check(i - b, i, j, H)
+ Check(i, j, j + b, H) + Check(i - a, j, j, H);
return Check(i-v, i, j, H) + Check(i, j, j+v, H);
}
ll count_triples(vector<int> H) {
n = H.size(); ll cnt = 0;
FOR(i, 0, n-3, 1) FOR(j, i+1, n-2, 1) FOR(j, j+1, n-1, 1)
cnt += Check(i, j, k);
return cnt;
}
vector<int> construct_range(int M, int K) {
vector<int> a; a.clear();
return a;
}