Submission #1258119

#TimeUsernameProblemLanguageResultExecution timeMemory
1258119allin27xTriple Peaks (IOI25_triples)C++20
34 / 100
2093 ms2632 KiB
#include "triples.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long

int ans = 0;
int n;

void count1(vector<signed> &h){
	for (int idx = 0; idx<n; idx++){
		int x = h[idx];
		int idh = idx - x;
		if (idh < 0) continue;
		int y = h[idh] - x;
		if (y <= 0 || y==x) continue;
		int idy = idx + y;
		if (idy >= n) continue;
		if (h[idy] == y) ans++;
	}
}

void count2(vector<signed> &h){
	for (int idx = 0; idx<n; idx++){
		int x = h[idx];
		int idy = idx + x;
		if (idy >= n) continue;
		int y = h[idy];
		int idh = idx - y;
		if (idh < 0) continue;
		if (h[idh] == x + y) ans++;
	}	
}

void count3(vector<signed> &h){
	for (int idx = 0; idx<n; idx++){
		int x = h[idx];
		int idh = idx + x;
		if (idh >= n) continue;
		int y = h[idh] - x;
		if (y <= 0 || y==x) continue;
		int idy = idh + y;
		if (idy >= n) continue;
		if (h[idy] == y) ans++;
	}
}

void count4(vector<signed> &h){
	for (int idx = 0; idx<n; idx++){
		for (int idy = idx; idy < n; idy++){
			if (idy - idx != h[idx] + h[idy]) continue;
			int idh = idx + h[idy];
			if (idh >= n) continue;
			if (h[idh] == h[idx] + h[idy]) ans++;
		}
	}
}


long long count_triples(std::vector<signed> h) {
	n = h.size();
	auto rh = h; reverse(rh.begin(), rh.end());
	count1(h); count1(rh);
	count2(h); count2(rh);
	count3(h); 
	count4(h); 
	return ans;
}

std::vector<signed> construct_range(signed M, signed 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...