Submission #1252364

#TimeUsernameProblemLanguageResultExecution timeMemory
1252364walrusramen21Triple Peaks (IOI25_triples)C++20
5.29 / 100
2096 ms2488 KiB
#include "triples.h"
#include <algorithm>
#include <array>
#include <iterator>
#include <map>
#include <cassert>

long long count_triples(std::vector<int> H) {
	int N = H.size();
	long long ans = 0;
	for (int i = 0; i < N; i++) {
		for (int j = i+1; j < N; j++) {
			int d = j-i;
			int hi = H[i], hj = H[j], hk = H[i] + H[j];
			// this is basically just massive casework on the order of hi hj hk :sob:
			if (hk < N-1) {
				if (hi == hj) {
					if (d == hi && (j+hi) < N && H[j+hi] == hk) ++ans;
				} else {
					if (d == hi) {
						if ((j+hj) < N && H[j+hj] == hk) ++ans;
						// if so, then we have H[i], H[j], H[j+H[j]]
						// H[i] = j-i, so thats good
						// H[j] = k-j, so thats good
						// H[k] = (k-j) + (j-i) = k-i, so thats good
						// now we just spam this logic literally everywhere
					}
					if (d == hj) {
						if ((j+hi) < N && H[j+hi] == hk) ++ans;
					}
				}
			}
			if (hj > hi) {
				hk = hj - hi;
				if (d == hi && (j+hk) < N && H[j+hk] == hk) ++ans;
				if (d == hk && (j+hi) < N && H[j+hi] == hk) ++ans;
			}
			if (hi > hj) {
				hk = hi - hj;
				if (d == hj && (j+hk) < N && H[j+hk] == hk) ++ans;
				if (d == hk && (j+hj) < N && H[j+hj] == hk) ++ans;
			}
		}
	}
	return ans;
}

std::vector<int> construct_range(int M, int K) {
	std::vector<int> ans;
	ans.push_back(1);
	ans.push_back(1);
	for (int i = 2; i < M; i++) {
		ans.push_back(i);
	}
	return ans;
}
#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...