제출 #1249389

#제출 시각아이디문제언어결과실행 시간메모리
1249389mondellbit3개의 봉우리 (IOI25_triples)C++20
75.29 / 100
117 ms15944 KiB
#include "triples.h" #include <vector> #include <algorithm> #include <cmath> using namespace std; long long count_triples(std::vector<int> H) { long long ans = 0; int n = H.size(); for(int i = 0; i < n; i++) { if(H[i] + i < n) { int j = i + H[i]; if(H[j] < H[i]){ int k = j - H[j]; if(H[k] + H[j] == H[i]) ans++; if(2 * H[j] != H[i]) { k = i + H[j]; if(H[k] + H[j] == H[i]) ans++; } } } if(i - H[i] >= 0) { int j = i - H[i]; if(H[j] < H[i]) { int k = j + H[j]; if(H[k] + H[j] == H[i]) ans++; if(2 * H[j] != H[i]) { k = i - H[j]; if(H[k] + H[j] == H[i]) ans++; } } } } vector<int> b[2 * n + 1]; for(int i = 0; i < n; i++) b[H[i] - i + n].push_back(i); int cutoff = sqrt(n); for(int x = 1; x <= 2 * n; x++){ if(b[x].size() <= cutoff) { for(int v1 = 0; v1 < b[x].size(); v1++){ int i = b[x][v1]; for(int v2 = 0; v2 < v1; v2++){ int j = b[x][v2], k = j + H[i]; if(k < n && k > i){ if(H[i] == (k - j) && H[j] == (k - i) && H[k] == (i - j)) ans++; } } } } else { for(int k = 0; k < n; k++){ int tmp = x - n, sum = k - tmp, diff = H[k]; if(diff % 2 == sum % 2){ int i = (sum - diff) / 2, j = (sum + diff) / 2; if(0 <= i && i < n && 0 <= j && j < n && H[i] - i == tmp && H[j] - j == tmp) ans++; } } } } for(int i = 0; i < n; i++){ int j = i + H[i]; if(j < n && H[j] > H[i]){ int k = i + H[j]; if(k < n) { if(H[k] + H[i] == H[j] && H[k] != H[i]) ans++; } } } return ans; } std::vector<int> construct_range(int M, int K) { vector<int> H; for(int i = 0; i < M; i++) { if(i % 3 == 2) H.push_back(2); else H.push_back(1); } 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...