Submission #1354996

#TimeUsernameProblemLanguageResultExecution timeMemory
1354996wibulordTriple Peaks (IOI25_triples)C++20
Compilation error
0 ms0 KiB
#include "triples.h"
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

static ll count3(const vector<int>& H) {
    int N = (int)H.size();
    ll ans = 0;

    // Permutation 1: (L, R, L+R)
    for (int i = 0; i < N; ++i) {
        int j = i + H[i];
        if (j < 0 || j >= N) continue;
        int k = j + H[j];
        if (k < 0 || k >= N) continue;
        if (H[k] == H[i] + H[j]) ++ans;
    }

    // Permutation 2: (L, L+R, R)
    for (int i = 0; i < N; ++i) {
        int j = i + H[i];
        if (j < 0 || j >= N) continue;
        int x = H[j] - H[i];   // x = R
        if (x <= 0) continue;
        int k = j + x;
        if (k < 0 || k >= N) continue;
        if (H[k] == x) ++ans;
    }

    // Permutation 3: (R, L, L+R)
    for (int j = 0; j < N; ++j) {
        int i = j - H[j];
        if (i < 0 || i >= N) continue;
        int k = j + H[i];
        if (k < 0 || k >= N) continue;
        if (H[k] == H[i] + H[j]) ++ans;
    }

    return ans;
}

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

    ll ans = 0;
    ans += count3(H);

    vector<int> R = H;
    reverse(R.begin(), R.end());
    ans += count3(R);

    // Subtract duplicate patterns:
    // (a, a, 2a), (a, 2a, a), (2a, a, a)

    for (int i = 0; i < N; ++i) {
        int a = H[i];
        int j = i + a;
        int k = i + 2 * a;
        if (j >= N || k >= N) continue;

        // (a, a, 2a)
        if (H[j] == a && H[k] == 2 * a) --ans;

        // (a, 2a, a)
        if (H[j] == 2 * a && H[k] == a) --ans;
    }

    for (int i = 0; i < N; ++i) {
        if (H[i] % 2) continue;
        int a = H[i] / 2;
        int j = i + a;
        int k = i + 2 * a;
        if (j >= N || k >= N) continue;

        // (2a, a, a)
        if (H[j] == a && H[k] == a) --ans;
    }

    return ans;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccGV9sfB.o: in function `main':
grader.cpp:(.text.startup+0x197): undefined reference to `construct_range(int, int)'
collect2: error: ld returned 1 exit status