제출 #1249650

#제출 시각아이디문제언어결과실행 시간메모리
1249650FernandoJC073개의 봉우리 (IOI25_triples)C++20
23.91 / 100
2095 ms2632 KiB
#include <bits/stdc++.h> #define ll long long #define vi vector<int> #define vl vector<ll> #define For(i, a, n) for(int i = a; i<n; ++i) using namespace std; ll query123(vi H, bool b1){ int n = H.size(); int N = n; function<bool(int, int, int)> triple = [&](int a, int b, int c){ if(a>b || a>c || b>c) return false; if(c>=n) return false; if(a<0) return false; vi q1 = {b-a, c-b, c-a}; vi q2 = {H[a], H[b], H[c]}; sort(q1.begin(), q1.end()); sort(q2.begin(), q2.end()); return (q1 == q2); }; ll ans = 0; For(i, 0, n){ int lim = b1 ? min(n, i+11) : n; For(j, i+1, n){ if(H[i] == H[j]){ if(j-i != H[i]) continue; int k = j+H[i]; if(k>=N) continue; ans += (H[k] == 2*H[i]); continue; } if(j-i != H[i] && j-i != H[j]){ int k2 = i+j+H[i]+H[j]; if(k2&1) continue; k2/=2; if(k2>=N) continue; ans += (H[k2] == j-i && k2-j == min(H[i], H[j]) && k2-i == max(H[i], H[j])); continue; } if(j-i == H[i]){ ans += triple(i, j, i+H[j]); ans += triple(i, j, j+H[j]); } else if(j-i == H[j]){ ans += triple(i, j, i+H[i]); ans += triple(i, j, j+H[i]); } } } return ans; } ll count_triples(vi H){ int n = H.size(); return query123(H, (n<=2000)); } vi construct_range(int M, int K){ vi ans(M); ans[0] = 1; ans[1] = 2; For(i, 2, M){ ans[i]= -1; vi arr(M, 0); for(int j = i-1; j>=0; --j){ for(int k = j-1; k>=0; --k){ multiset<int> st; st.insert(i-j); st.insert(i-k); st.insert(j-k); auto it = st.find(ans[k]); if(it==st.end()) continue; st.erase(it); it= st.find(ans[j]); if(it==st.end()) continue; st.erase(it); arr[*st.begin()]++; } } int mx = 0, pos; for(int j = M-1; j>=1; --j){ if(arr[j]>=mx){ mx = arr[j]; pos = j; } } ans[i] = pos; } 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...