Submission #1250603

#TimeUsernameProblemLanguageResultExecution timeMemory
1250603s4dz3개의 봉우리 (IOI25_triples)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
//sub4:
#define int long long
vector<int> construct_range(signed M, signed K)
{
    long long n = M;
    vector<signed> ans1 =
    {
        4,  3,  1,  2,  1,
        4,  3,  2,  7,  6,
        5,  8, 11, 10,  9,
        1,  7,  2,  3,  4,
    };
    if(M <= 20)
    {
        while(ans1.size() > n || ans1.back() >= n) ans1.pop_back();
        return ans1;
    }
    vector<signed> a = {1,2,1};
    long long tmp = 2;
    while(a.size() < n)
    {
        long long v = a.size() + 1;
        for(int i = 0; i < tmp + 1; i++) a.push_back(v-i);
        tmp = v;
    }
    while(a.size() > n || a.back() >= n) a.pop_back();
    return a;
}
/*long long count_triples(vector<int> H)
{
    int n = H.size();
    ll ans = 0;
    for (int k = 0; k < n; k++)
    {
        int c = H[k];
        int i = k - c;
        if (i < 0 || i >= n) continue;

        int a = H[i];
        if (a > c - a) continue;

        int need = c - a;
        int j1   = i + a;
        int j2   = k - a;
        if (i < j1 && j1 < k && H[j1] == need) ans++;
        if (j2 != j1 && i < j2 && j2 < k && H[j2] == need) ans++;
    }
    return ans;
}*/

long long count_triples(vector <signed> H)
{
    int n = H.size();
    long long ans = 0;
    //Hj = j - i
    for(int j = 0; j < n; j++)
    {
        for(int i = max(0LL, j - H[j] + 1); i < j && i + H[j] < n; i++)
        {
            int k = i + H[j];
            int x = H[k], y = H[i];
            int d1 = j - i, d2 = k - j;
            if((H[k] == d1 && H[i] == d2) || (H[k] == d2 && H[i] == d1)) ans++;
        }
        int l = j - H[j];
        if(l >= 0)
        {
            int x = H[l];
            int y = H[j] - x;
            if(y > 0)
            {
                if(H[l + x] == y) ans++;
                if(y != x && H[l + y] == y) ans++;
            }
        }
        int r = j + H[j];
        if(r < n)
        {
            int x = H[r];
            int y = H[j] - x;
            if(y > 0)
            {
                if(H[j + x] == y) ans++;
                if(y != x && H[j + y] == y) ans++;
            }
        }
    }
    return ans;
}

Compilation message (stderr)

triples.cpp: In function 'std::vector<long long int> construct_range(int, int)':
triples.cpp:19:16: error: could not convert 'ans1' from 'vector<int>' to 'vector<long long int>'
   19 |         return ans1;
      |                ^~~~
      |                |
      |                vector<int>
triples.cpp:30:12: error: could not convert 'a' from 'vector<int>' to 'vector<long long int>'
   30 |     return a;
      |            ^
      |            |
      |            vector<int>