Submission #1249813

#TimeUsernameProblemLanguageResultExecution timeMemory
1249813gelastropodTriple Peaks (IOI25_triples)C++20
0 / 100
2095 ms12868 KiB
#include "triples.h"
#include <bits/stdc++.h>
using namespace std;

long long count_triples(vector<int> H) {
	int N = H.size();
	vector<vector<int>> locs(N, vector<int>());
	for (int i = 0; i < N; i++) {
		locs[H[i]].push_back(i);
	}
	int ans = 0;
	for (int i = 0; i < N; i++) {
		for (int j = i + 1; j < N; j++) {
			int dist = j - i;
			if (H[i] != dist && H[j] != dist) {
				if (i - H[i] >= 0 && i - H[i] != j) {
					int k = i - H[i];
					if (H[k] == dist && abs(j - k) == H[j]) ans++;
				}
				if (i - H[j] >= 0 && i - H[j] != j && H[i] != H[j]) {
					int k = i - H[j];
					if (H[k] == dist && abs(j - k) == H[i]) ans++;
				}
				if (i + H[i] < N && i + H[i] != j) {
					int k = i + H[i];
					if (H[k] == dist && abs(j - k) == H[j]) ans++;
				}
				if (i + H[j] < N && i + H[j] != j && H[i] != H[j]) {
					int k = i + H[j];
					if (H[k] == dist && abs(j - k) == H[i]) ans++;
				}
			}
			else if (H[i] == dist) {
				if (i - H[j] >= 0 && i - H[j] != j) {
					int k = i - H[j];
					if (H[k] == abs(j - k)) ans++;
				}
				if (j - H[j] >= 0 && j - H[j] != i) {
					int k = j - H[j];
					if (H[k] == abs(i - k)) ans++;
				}
				if (i + H[j] < N && i + H[j] != j && j - H[j] != i + H[j]) {
					int k = i + H[j];
					if (H[k] == abs(j - k)) ans++;
				}
				if (j + H[j] < N && j + H[j] != i && i - H[j] != j + H[j]) {
					int k = j + H[j];
					if (H[k] == abs(i - k)) ans++;
				}
			}
			else {
				if (i - H[i] >= 0 && i - H[i] != j) {
					int k = i - H[i];
					if (H[k] == abs(j - k)) ans++;
				}
				if (j - H[i] >= 0 && j - H[i] != i) {
					int k = j - H[i];
					if (H[k] == abs(i - k)) ans++;
				}
				if (i + H[i] < N && i + H[i] != j && j - H[j] != i + H[j]) {
					int k = i + H[i];
					if (H[k] == abs(j - k)) ans++;
				}
				if (j + H[i] < N && j + H[i] != i && i - H[i] != j + H[j]) {
					int k = j + H[i];
					if (H[k] == abs(i - k)) ans++;
				}
			}
		}
	}
	return ans / 3;
}

vector<int> construct_range(int M, int K) {
	return {1, 1, 1};
}
#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...