Submission #1250733

#TimeUsernameProblemLanguageResultExecution timeMemory
1250733NekoRollyTriple Peaks (IOI25_triples)C++20
75.29 / 100
893 ms18248 KiB
#include "triples.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; vector<int> h; bool same(vector<int> a,vector<int> b){ sort(a.begin(), a.end()); sort(b.begin(), b.end()); for (int i=0; i<3; i++) if (a[i] != b[i]) return false; return true; } bool check(int i,int j,int k){ bool flag = 0 <= i && i < j && j < k && k < n && same({k-i, k-j, j-i}, {h[i], h[j], h[k]}); // if (flag) cout << i << " " << j << " " << k << " <-\n"; // return 0 <= i && i < j && j < k && k < n && same({k-i, k-j, j-i}, {h[i], h[j], h[k]}); return flag; } const int N = 2e5+4;; vector<int> vals[2*N]; ll count_triples(vector<int> H){ h = H; n = h.size(); ll ans = 0; for (int i=0; i<n; i++){ int l = i - h[i]; int r = i + h[i]; if (l >= 0){ ans += check(l, l+h[l], i); if (l+h[l] != i-h[l]) ans += check(l, i-h[l], i); if (h[l] != 2*h[i]) ans += check(i-h[l], l, i); } if (r < n){ ans += check(i, r-h[r], r); if (r-h[r] != i+h[r]) ans += check(i, i+h[r], r); } vals[i + h[i]].push_back(i); } for (int val=1; val<2*n; val++){ int sz = vals[val].size(); if (sz == 0) continue; if (1ll*sz*sz <= n){ // *O(k*k) // cout << "caso 1 : val = " << val << " sz = " << sz << "\n"; for (int j=0; j<sz; j++) for (int k=j+1; k<sz; k++){ int i = vals[val][j] + vals[val][k] - val; ans += check(i, vals[val][j], vals[val][k]); } } else{ // *O(n) // cout << "caso 1 : val = " << val << " sz = " << sz << "\n"; for (int i=0; i<n; i++){ int j = i - h[i] + val; int k = i + h[i] + val; if (j%2 == 1 || k%2 == 1) continue; j /= 2, k /= 2; if (j < 0 || j >= n || k < 0 || k >= n) continue; if (j + h[j] != val || k + h[k] != val) continue; ans += check(i, j, k); } } } return ans; } vector<int> construct_range(int M, int K){ vector<int> vec; int patron[] = {1, 1, 2}, p=0; while (vec.size() < M){ vec.push_back(patron[p]); p = (p+1)%3; } return vec; }
#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...