Submission #1302517

#TimeUsernameProblemLanguageResultExecution timeMemory
1302517regulardude63개의 봉우리 (IOI25_triples)C++20
0.51 / 100
23 ms23580 KiB
#include "triples.h" #include <bits/stdc++.h> using namespace std; long long count_triples(vector<int> H){ int n = (int)H.size(); vector<vector<int>> L(n), R(n); for(int i=0;i<n;i++){ int a = H[i]; if(i + a < n) L[i + a].push_back(a); if(i - a >= 0) R[i - a].push_back(a); } long long ans = 0; for(int i=0;i<n;i++){ int d = H[i]; int k = i + d; if(k >= n) continue; int t = H[k]; if(1 <= t && t <= d-1){ int j1 = i + t; if(j1 > i && j1 < k && H[j1] == d - t) ans++; int j2 = i + (d - t); if(j2 > i && j2 < k && j2 != j1 && H[j2] == t) ans++; } } for(int k=0;k<n;k++){ int d = H[k]; int i = k - d; if(i < 0) continue; int t = H[i]; if(1 <= t && t <= d-1){ int j1 = i + t; if(j1 > i && j1 < k && H[j1] == d - t) ans++; int j2 = i + (d - t); if(j2 > i && j2 < k && j2 != j1 && H[j2] == t) ans++; } } for(int j=0;j<n;j++){ int d = H[j]; auto &A = L[j]; auto &B = R[j]; if(A.empty() || B.empty()) continue; if((int)A.size() <= (int)B.size()){ unordered_set<int> sb; sb.reserve(B.size() * 2 + 1); for(int x: B) sb.insert(x); for(int a: A){ int b = d - a; if(b >= 1 && b <= n-1 && sb.find(b) != sb.end()) ans++; } }else{ unordered_set<int> sa; sa.reserve(A.size() * 2 + 1); for(int x: A) sa.insert(x); for(int b: B){ int a = d - b; if(a >= 1 && a <= n-1 && sa.find(a) != sa.end()) ans++; } } } return ans; } vector<int> construct_range(int M, int K){ int N = max(3, min(M, 200000)); vector<int> H(N, 1); if(N >= 3) H[2] = 2; return H; }
#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...