Submission #1249803

#TimeUsernameProblemLanguageResultExecution timeMemory
1249803kduckpTriple Peaks (IOI25_triples)C++20
8.17 / 100
2093 ms3012 KiB
#include "triples.h" #include <vector> #include <algorithm> using namespace std; long long count_triples(std::vector<int> H) { long long res = 0; int n = H.size(); if (n <= 100) { for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) for (int k = j + 1; k < n; k++) { vector<int> height = {H[i], H[j], H[k]}; vector<int> dist = {j - i, k - i, k - j}; sort(height.begin(), height.end()); sort(dist.begin(), dist.end()); if (height == dist) res++; } return res; } // Check if all H[i] <= 10 bool small_value = true; for (int h : H) if (h > 10) { small_value = false; break; } if (small_value) { vector<vector<int>> pos(11); for (int i = 0; i < n; ++i) pos[H[i]].push_back(i); for (int a = 1; a <= 10; ++a) for (int b = a + 1; b <= 10; ++b) for (int c = b + 1; c <= 10; ++c) { vector<int> val = {a, b, c}; sort(val.begin(), val.end()); vector<int>& A = pos[a]; vector<int>& B = pos[b]; vector<int>& C = pos[c]; for (int j : B) { // i < j < k // i in A, j in B, k in C // dùng binary search để đếm số lượng i < j int cnt_i = lower_bound(A.begin(), A.end(), j) - A.begin(); for (int k : C) { if (k <= j) continue; int dist1 = j - 0; // tạm thời int dist2 = k - 0; int dist3 = k - j; vector<int> dist = {j - 0, k - 0, k - j}; // chỉ phụ thuộc vào i, j, k thực tế vector<int> h = {a, b, c}; sort(dist.begin(), dist.end()); if (dist == h) { // thêm cnt_i bộ ba (i < j < k) res += cnt_i; } } } } return res; } // fallback return 0; } std::vector<int> construct_range(int M, int K) { return {1, 1, 2}; // tùy đề }
#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...