Submission #1288081

#TimeUsernameProblemLanguageResultExecution timeMemory
1288081nikoloz-ch3개의 봉우리 (IOI25_triples)C++20
30.25 / 100
2095 ms33368 KiB
#include <bits/stdc++.h> using namespace std; long long count_triples(std::vector<int> H){ int N = H.size(), ans = 0; if(N <= 5000){ map<int,vector<int>> mp; for(int i = 0; i < N; i++){ mp[i-H[i]].push_back(i); } for(int i = 0; i < N; i++){ for(int j = i+1; j < N; j++){ const int k = j-i; if(k != H[i] and k != H[j]){ if(k != abs(H[i]-H[j])) continue; const int p = j+min(H[i],H[j]); if(p >= N or H[p] != k or p <= j) continue; ans++; continue; } if(k == H[i]){ for(auto &t : mp[i]){ if(t <= j) continue; if(t-j != H[j]) continue; ans++; } for(auto &t : mp[j]){ if(t <= j) continue; if(t-i != H[j]) continue; ans++; } continue; } for(auto &t : mp[i]){ if(t <= j) continue; if(abs(t-j) != H[i]) continue; ans++; } for(auto &t : mp[j]){ if(t <= j) continue; if(abs(t-i) != H[i]) continue; ans++; } continue; } } return ans; } int mx = -1e6; for(int i = 0; i < N; i++){ mx = max(mx, H[i]); } if(mx <= 10){ for(int i = 0; i < N-10; i++){ vector<int> a; for(int j = i; j <= i+10; j++){ a.push_back(H[j]); } ans += count_triples(a); a.pop_back(); ans -= (i > 0 ? count_triples(a) : 0); } return ans; } map<int,vector<int>> m; for(int i = 0; i < N; i++){ m[i-H[i]].push_back(i); } for(int i = 0; i < N; i++){ auto mp = m; int o = i, t1 = 0; for(auto &t : mp[o]){ if(t <= i) continue; for(auto &p : mp[t]){ if(p <= t) continue; if(t-i == H[i]) ans++; } if(t+H[i]-i == H[t]) ans++; if(t == i+H[i]) t1 = i+H[i]; } if(t1 != i+H[i]){ t1 = i+H[i]; for(auto &p : mp[t1]){ if(p <= t1) continue; if(t1-i == H[t1]) ans++; } } } return ans; } std::vector<int> construct_range(int M, int K){ vector<int> a = {2, 1, 1, 2, 3}, ans; for(int i = 0; i < M/5; i++){ for(int j = 0; j < a.size(); j++){ ans.push_back(a[j]); } } 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...