제출 #1249874

#제출 시각아이디문제언어결과실행 시간메모리
1249874Zicrus3개의 봉우리 (IOI25_triples)C++20
18 / 100
2093 ms1864 KiB
#include <bits/stdc++.h>
#include "triples.h"
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
#define all(v) v.begin(), v.end()
constexpr ll inf = 1ll << 62ll;
mt19937 mt(time(0));
ll _ = 0;

bool valid(vector<int> &h, ll i, ll j, ll k) {
	if (j < i || k < i || k >= h.size()) return false;
	multiset<ll> dists = {abs(i-j), abs(j-k), abs(k-i)};
	multiset<ll> heights = {h[i], h[j], h[k]};
	return dists == heights;
}

ll count_triples(vector<int> h) {
	ll n = h.size();
	ll cnt = 0;
	for (ll i = 0; i < n; i++) {
		ll j = i + h[i];
		if (j < n && h[j] != h[i]) {
			if (i + h[j] != j + h[i]) cnt += valid(h, i, j, i + h[j]);
			if (i + h[j] != j - h[j]) cnt += valid(h, i, j, j - h[j]);
			cnt += valid(h, i, j, j + h[j]);
		}
		for (j = i+1; j + h[i] < n; j++) {
			ll k = j + h[i];
			cnt += valid(h, i, j, k);
		}
	}
	return cnt;
}

vector<int> construct_range(int M, int K) {
	return {};
}

#ifdef TEST
#include "grader.cpp"
#endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...