Submission #1256607

#TimeUsernameProblemLanguageResultExecution timeMemory
1256607jamesbamber3개의 봉우리 (IOI25_triples)C++20
24 / 100
2096 ms1968 KiB
#include "triples.h"
#include <algorithm>
#include <iostream>

using namespace std;
using ll = long long;

long long count_triples(std::vector<int> H) {
    int N = H.size();
    ll ct = 0;

    auto check_triple = [&](int i, int j, int k) -> void {
        
        if(i < 0 or i >= N or j < 0 or j >= N or k < 0 or k >= N or i == j or i == k or j == k) return;
        if(H[i] <= H[j] or H[i] <= H[k]) return; //check that i is the tallest

        // cerr << i << " " << j << " " << k << endl;

        vector<int> ids = {H[i], H[j], H[k]};
        vector<int> diffs = {abs(i-j), abs(i-k), abs(j-k)};

        sort(ids.begin(), ids.end());
        sort(diffs.begin(), diffs.end());

        if(ids == diffs) ct++;
    };

    for(int i=0; i<N; i++) {
        // max non al centro
        if(i - H[i] >= 0) {
            int j = i - H[i];
            check_triple(i, j, j + H[j]);
            if(i - H[j] != j + H[j]) check_triple(i, j, i - H[j]);
        }

        if(i + H[i] < N) {
            int j = i + H[i];
            check_triple(i, j, j - H[j]);
            if(i + H[j] != j - H[j]) check_triple(i, j, i + H[j]);
        }

        // max al centro
        for(int j=i-H[i]+1; j<i; j++){
            check_triple(i, j, j+H[i]);
        }
    }

    return ct;
}

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