Submission #1289294

#TimeUsernameProblemLanguageResultExecution timeMemory
1289294AmineWeslatiTriple Peaks (IOI25_triples)C++20
18 / 100
2096 ms1952 KiB
#include "triples.h"

#include <set>
using namespace std;



long long count_triples(std::vector<int> H) {
  long long ans = 0;
  int n = H.size();

  auto f = [&H, &n] (const int& i, const int& j, const int& k) -> int {
    if (!(j > i && k > j && j < n && k < n))
      return 0;
    multiset<int> a;
    a.insert(j - i); a.insert(k - i); a.insert(k - j);

    for (int x : {H[i], H[j], H[k]}) {
      auto it = a.find(x);
      if (it == a.end()) return 0;
      a.erase(it);
    }
    return 1;
  };

  
  for (int i = 0; i < n; i++) {
    int h_i = H[i];

    
    if (i + h_i < n) {
      //case 1      
      for (int k = i + h_i + 1; k < n; k++) 
        ans += f(i, i + h_i, k);

      //case 2
      for (int j = i + 1; j < i + h_i; j++) 
        ans += f(i, j, i + h_i);

      // case 3
      for (int j = i + 1; j < n; j++) 
        if (j != i + h_i && j + h_i != i + h_i) 
          ans += f(i, j, j + h_i);
    }

    
    
  }

  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...