#include "triples.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
int ans = 0;
int n;
const int SQRT = 450;
ifstream fin("oii");
ofstream fout("ott");
void count1(vector<signed> &h){
for (int idx = 0; idx<n; idx++){
int x = h[idx];
int idh = idx - x;
if (idh < 0) continue;
int y = h[idh] - x;
if (y <= 0 || y==x) continue;
int idy = idx + y;
if (idy >= n) continue;
if (h[idy] == y) ans++;
}
}
void count2(vector<signed> &h){
for (int idx = 0; idx<n; idx++){
int x = h[idx];
int idy = idx + x;
if (idy >= n) continue;
int y = h[idy];
int idh = idx - y;
if (idh < 0) continue;
if (h[idh] == x + y) ans++;
}
}
void count3(vector<signed> &h){
for (int idx = 0; idx<n; idx++){
int x = h[idx];
int idh = idx + x;
if (idh >= n) continue;
int y = h[idh] - x;
if (y <= 0 || y==x) continue;
int idy = idh + y;
if (idy >= n) continue;
if (h[idy] == y) ans++;
}
}
void count4(vector<signed> &h){
vector<vector<int>> tl(3*n);
for (int i=0; i<n; i++){
int j = i + h[i]; if (j >= 3*n) continue;
tl[j].push_back(h[i]);
}
for (int idt = 0; idt<3*n; idt++){
if (tl[idt].size() > SQRT){
for (int idx = 0; idx < idt; idx++){
int x = h[idx];
int y = idt - idx; y -= x;
if (y<=0 || (y&1)) continue;
y/=2; int idy = idt - y;
int idh = idt - x - y;
if (h[idh] == x+y && h[idy] == y) ans++;
}
} else {
for (int y: tl[idt]){
for (int hv: tl[idt]){
int x = hv - y; if (x<=0) continue;
int idx = idt - hv - y;
if (idx <0) continue;
if (h[idx] == x) ans++;
}
}
}
}
}
long long count_triples(std::vector<signed> h) {
n = h.size(); ans = 0;
auto rh = h; reverse(rh.begin(), rh.end());
count1(h); count1(rh);
count2(h); count2(rh);
count3(h);
count4(h);
return ans;
}
vector<signed> tr;
vector<vector<signed>> best;
int nr = 0; int last = 0;
int nans = 0;
const int nwsz = 320;
const int nwnr = 500;
void comb(){
vector<vector<signed>> p;
for (int i=0; i<nwnr; i++){
vector<signed> tr(nwsz); for (int i=0; i<nwsz ;i++) fin>>tr[i];
p.push_back(tr);
}
for (int i=0; i<nwnr; i++){
for (int j=0; j<nwnr; j++){
vector<signed> tr2 = p[i]; for (int ir=0; ir<nwsz; ir++) tr2.push_back(p[j][ir]);
int nw = count_triples(tr2);
if (nw > nans) best.clear(), nans = nw;
if (nw == nans && best.size()< 500) best.push_back(tr2);
}
}
}
void cut(int sz){
vector<vector<signed>> bs;
for (auto v: best){
auto r = v; while((int)r.size() > sz) r.pop_back();
bs.push_back(r);
}
int best = 0; vector<signed> tbh;
for (auto v: bs){
int nw = count_triples(v);
if (nw > best) best =nw, tbh = v;
}
sz = min(sz,(int) tbh.size());
cout<<'{';
for (int i=0; i<sz-1; i++) cout<<tbh[i]<<',';
cout<<tbh[sz-1]<<"}\n";
}
std::vector<signed> construct_range(signed n, signed K) {
vector<signed> fl = {3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5,3,1,2,1,4,3,2,7,6,5,2,3,4,1,2,1,3,3,2,5};
vector<signed> res;
while (res.size() < n){
for (int i=0; i<640; i++) res.push_back(fl[i]);
}
while (res.size() > n) res.pop_back();
return res;
}
# | 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... |