Submission #1258116

#TimeUsernameProblemLanguageResultExecution timeMemory
1258116avighnaTriple Peaks (IOI25_triples)C++20
18 / 100
2096 ms1860 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 i = 0; i < n; ++i) {
    int j = H[i] + i;
    if (0 <= j and j < n) {
      for (int k = j + 1; k < n; ++k) {
        ans += check(j - i, k - j, k - i, H[i], H[j], H[k]);
      }
    }
  }
  // not case 1 but case 2
  for (int j = 0; j < n; ++j) {
    int i = j - H[j];
    if (0 <= i and i < n and j != H[i] + i) {
      for (int k = j + 1; k < n; ++k) {
        ans += check(j - i, k - j, k - i, H[i], H[j], H[k]);
      }
    }
  }
  // not case 1 or case 2 but case 3.1
  // so a[i] + i != j and i != j - a[j]
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      int k = H[i] + i;
      if (k != H[j] + j or H[i] + i == j or i == j - H[j]) {
        continue;
      }
      if (0 <= k and k < n) {
        ans += check(j - i, k - j, k - i, H[i], H[j], H[k]);
      }
    }
  }
  // not case 1 or case 2 or case 3.1 but case 3.2
  // so NOT a[i] + i == j or i == j - a[j] or k == a[i] + i == a[j] + j
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      int k = H[i] + j;
      if (k != H[j] + i or H[i] + i == j or i == j - H[i] or
          (k == H[i] + i and k == H[j] + j)) {
        continue;
      }
      if (0 <= k and k < n) {
        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...