제출 #1252538

#제출 시각아이디문제언어결과실행 시간메모리
1252538SamAndTriple Peaks (IOI25_triples)C++20
11 / 100
18 ms2756 KiB
#include "triples.h"
#include <bits/stdc++.h>
using namespace std;
#define m_p make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define fi first
#define se second
typedef long long ll;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
mt19937 rnf(2106);
const int N = 200005;

int n;
int h[N];

int aa[3], bb[3];
bool stg(int i, int j, int k)
{
    assert(1 <= i && i < j && j < k && k <= n);
    aa[0] = h[i];
    aa[1] = h[j];
    aa[2] = h[k];
    bb[0] = j - i;
    bb[1] = k - j;
    bb[2] = k - i;
    sort(aa, aa + 3);
    sort(bb, bb + 3);
    return (aa[0] == bb[0] && aa[1] == bb[1] && aa[2] == bb[2]);
}

long long count_triples(std::vector<int> H)
{
    n = sz(H);
    for (int i = 1; i <= n; ++i)
        h[i] = H[i - 1];

    ll ans = 0;
    for (int i = 1; i <= n; ++i)
    {
        int k = i + h[i];
        if (k > n)
            continue;
        if (h[k] >= h[i])
            continue;
        int j1 = i + h[k];
        if (stg(i, j1, k))
            ++ans;
        int j2 = k - h[k];
        if (j1 != j2 && stg(i, j2, k))
            ++ans;
    }
    for (int k = 1; k <= n; ++k)
    {
        int i = k - h[k];
        if (i < 1)
            continue;
        if (h[i] >= h[k])
            continue;
        int j1 = k - h[i];
        if (stg(i, j1, k))
            ++ans;
        int j2 = i + h[i];
        if (j1 != j2 && stg(i, j2, k))
            ++ans;
    }

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