Submission #1250552

#TimeUsernameProblemLanguageResultExecution timeMemory
1250552nikdTriple Peaks (IOI25_triples)C++20
26.90 / 100
2096 ms1860 KiB
#include "triples.h" #include <bits/stdc++.h> using namespace std; using ll = long long; long long count_triples(std::vector<int> H) { int n = H.size(); ll sol = 0; for(int i = 0; i<n; i++){ for(int j = i+1; j<n; j++){ set<int> s; if(j-i == H[i]){ if(j+H[j] < n && H[j+H[j]] == H[i]+H[j]){ if(!s.count(j+H[j])){ sol++; s.insert(j+H[j]); } } if(H[j] > H[i] && j + H[j] - H[i] < n && H[j+H[j]-H[i]] == H[j]-H[i]){ if(!s.count(j+H[j] - H[i])){ sol++; s.insert(j+ H[j]-H[i]); } } } if(j-i == H[j]){ if(j+H[i] < n && H[j+H[i]] == H[j]+H[i]){ if(!s.count(j+H[i])){ sol++; s.insert(j+H[i]); } } if(H[i]-H[j] != H[j] && H[i] > H[j] && j + H[i] - H[j] < n && H[j+H[i]-H[j]] == H[i]-H[j]){ if(!s.count(j+H[i]-H[j])){ sol++; s.insert(j+H[i]-H[j]); } } } if(i + H[i] < n && i+H[i] > j && j-i == H[i+H[i]] && H[i] == H[j] + H[i+H[i]]){ if(!s.count(i+H[i])){ sol++; s.insert(i+H[i]); } } if(H[i] != H[j] && i+H[j] < n && i+H[j] > j && j-i == H[i+H[j]] && H[i+H[j]] + H[i] == H[j]){ if(!s.count(i+H[j])){ sol++; s.insert(i+H[j]); } } } } return sol; } std::vector<int> construct_range(int M, int K) { /*int NUM_BEST = 1; auto rec = [&](auto&& rec, vector<vector<int>> h, int n)->vector<int>{ vector<vector<int>> hh((M-1)*h.size()); for(int i = 0; i<h.size(); i++){ for(int j = 1; j<M; j++){ hh[i*(M-1)+j-1] = h[i]; hh[i*(M-1)+j-1].push_back(j); } } vector<ll> str(hh.size()); for(int i = 0; i<hh.size(); i++) str[i] = count_triples(hh[i]); vector<int> idx(hh.size()); iota(idx.begin(), idx.end(), 0); sort(idx.begin(), idx.end(), [&](int a, int b){return str[a] > str[b];}); vector<vector<int>> h_(NUM_BEST); for(int i =0; i<NUM_BEST; i++) h_[i] = hh[idx[i]]; if(n == M) return h_[0]; return rec(rec, h_, n+1); }; vector<vector<int>> init(M-1); for(int i = 0; i<M-1; i++) init[i] = {i+1}; vector<int> best = rec(rec, init, 2); cerr << count_triples(best) << '\n'; return best;*/ int kk = M/20; vector<int> sol(M); vector<int> tw = {13, 2, 1, 1, 3, 2, 3, 4, 1, 2, 1 ,3, 1, 6, 5, 4, 7, 6, 5, 1}; for(int i = 0; i<M; i++) sol[i] = tw[i%20]; return sol; }
#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...