제출 #1256621

#제출 시각아이디문제언어결과실행 시간메모리
1256621jamesbamberTriple Peaks (IOI25_triples)C++20
42.77 / 100
2092 ms2272 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++;
    };

    bool sorted = is_sorted(H.begin(), H.end());

    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
        if(sorted) continue;

        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) {
    vector<int> ans(M-1, 1);
    for(int i=0; i<M-1; i++) ans[i] = max(1, min(i, M-2-i));
    ans.push_back(3);
    return ans;
}
#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...