Submission #1252435

#TimeUsernameProblemLanguageResultExecution timeMemory
1252435bzzzzzzzzzzTriple Peaks (IOI25_triples)C++20
51 / 100
1236 ms1984 KiB
#include <bits/stdc++.h> #include "triples.h" using namespace std; using ll = long long; std::vector<int> construct_range(int M, int K) { return {1}; } long long count_triples(vector<int> H) { int n = (int)H.size(); ll ans = 0; bool f = true; for (int i = 1; i < n; i++) { if (H[i - 1] > H[i]) { f = false; } } if (n <= 50000) { for (int i = 0; i < n; i++) { for (int k = i + 2; k < n; k++) { int x = k - i; if (x == H[i]) { if (H[k] < x) { if (H[i + H[k]] == k - (i + H[k])) { ans++; } if (i + H[k] + H[k] != k && H[k - H[k]] == (k - H[k]) - i) { ans++; } } } else if (x == H[k]) { if (H[i] < x) { if (H[i + H[i]] == k - (i + H[i])) { ans++; } if (i + H[i] + H[i] != k && H[k - H[i]] == (k - H[i]) - i) { ans++; } } } else { if (H[i] + H[k] == x) { if (H[i + H[i]] == x) { ans++; } if (i + H[i] + H[i] != k && H[i + H[k]] == x) { ans++; } } } } } } else if (f) { for (int k = 0; k < n; k++) { int i = k - H[k]; if (i < 0) { continue; } if (H[i + H[i]] == k - (i + H[i])) { ans++; } if (i + H[i] + H[i] != k && (k - H[i]) - i == H[k - H[i]]) { ans++; } } } else { for (int i = 0; i < n; i++) { for (int k = i + 2; k < i + 12; k++) { for (int j = i + 1; j < k; j++) { vector<int> d; d.push_back(j - i); d.push_back(k - i); d.push_back(k - j); vector<int> h; h.push_back(H[i]); h.push_back(H[j]); h.push_back(H[k]); sort(d.begin(), d.end()); sort(h.begin(), h.end()); if (d[0] == h[0] && d[1] == h[1] && d[2] == h[2]) { ans++; } } } } } 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...