#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 query13(vi H){
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){
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();
if(n<=2000) return query13(H);
}
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;
}
컴파일 시 표준 에러 (stderr) 메시지
triples.cpp: In function 'long long int count_triples(std::vector<int>)':
triples.cpp:55:1: warning: control reaches end of non-void function [-Wreturn-type]
55 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |