제출 #1258129

#제출 시각아이디문제언어결과실행 시간메모리
1258129avighna3개의 봉우리 (IOI25_triples)C++20
11 / 100
17 ms1968 KiB
#include <bits/stdc++.h>

bool check(int a, int b, int c, int x, int y, int z) {
  std::array<int, 3> p = {a, b, c};
  std::array<int, 3> q = {x, y, z};
  std::sort(p.begin(), p.end());
  std::sort(q.begin(), q.end());
  return p == q;
}

long long count_triples(std::vector<int> H) {
  const int n = H.size();
  long long ans = 0;
  // case 1
  for (int k = 0; k < n; ++k) {
    int i = k - H[k];
    if (i < 0 or i >= n) {
      continue;
    }
    int j = H[i] + i;
    if (j < 0 or j >= n or !(i < j and j < k)) {
      continue;
    }
    ans += check(j - i, k - j, k - i, H[i], H[j], H[k]);
  }
  // case 2
  for (int k = 0; k < n; ++k) {
    int i = k - H[k];
    if (i < 0 or i >= n) {
      continue;
    }
    int j = k - H[i];
    if (j < 0 or j >= n or !(i < j and j < k)) {
      continue;
    }
    if (i != j - H[j]) {
      continue;
    }
    if (H[j] == k - j or H[i] == j - i) {
      continue;
    }
    ans += check(j - i, k - j, k - i, H[i], H[j], H[k]);
  }
  return ans;
}

std::vector<int> construct_range(int M, int K) { return {1, 1, 1}; }
#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...