Submission #1260369

#TimeUsernameProblemLanguageResultExecution timeMemory
1260369alexddTriple Peaks (IOI25_triples)C++20
8 / 100
2096 ms15172 KiB
#include "triples.h"
#include<bits/stdc++.h>
using namespace std;
int n;
long long rez = 0;
map<tuple<int,int,int>,int> mp;
vector<int> h;
void add(int i, int j, int k)
{
    if(i >= j || j >= k)
        return;
    if(i < 0 || k >= n)
        return;
    //if(h[j] >= max(h[i],h[k])) return;///caz special----------------------------------------------

    //vector<int> v1 = {j-i,k-j,k-i};
    //vector<int> v2 = {h[i],h[j],h[k]};

    //sort(v1.begin(),v1.end());
    //sort(v2.begin(),v2.end());

    if(min(j-i, k-j) == min({h[i],h[j],h[k]}) && k-i == max({h[i],h[j],h[k]}) && h[i] + h[j] + h[k] == 2 * max({h[i],h[j],h[k]}))
    //if(v1 == v2)
    {
        if(mp[{i,j,k}] == 0)
            rez++;
        mp[{i,j,k}] = 1;
    }
}
long long count_triples(std::vector<int> H)
{
    h = H;
    n = h.size();
    for(int j=0;j<n;j++)
    {
        if(j - h[j] >= 0) add(j - h[j], j, (j - h[j]) + h[j - h[j]]);
        if(j - h[j] >= 0) add(j - h[j], j, j + h[j - h[j]]);

        if(j + h[j] < n) add(j - h[j + h[j]], j, j + h[j]);
        if(j + h[j] < n) add((j + h[j]) - h[j + h[j]], j, j + h[j]);
    }

    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
            for(int k=j+1;k<n;k++)
                add(i,j,k);
    return rez;
}

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