Submission #1263022

#TimeUsernameProblemLanguageResultExecution timeMemory
1263022nerrrminTriple Peaks (IOI25_triples)C++20
11 / 100
13 ms3400 KiB
#include "triples.h"
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn = 2e5 + 10;
int n;
long long a[maxn];
long long count_triples(std::vector<int> H)
{
    n = H.size();
    for (int i = 1; i <= n; ++ i)
    {
        a[i] = H[i-1];
    }
    long long ans = 0;

    for (int j = 3; j <= n; ++ j)
    {
        long long dist = a[j];
        int i = j - dist;
        if(!(i >= 1 && i <= n))continue;
        int mdist = a[i];
        if(mdist > (dist - mdist))continue;
        int pos1 = i + mdist, is = 0;
        if(pos1 < j && a[pos1] == j - pos1)
        {
            ans ++;
            is = 1;
        }
        pos1 = j - mdist;
        if(pos1 == i + mdist && is)continue;
        if(pos1 > i && a[pos1] == pos1 - i)ans ++;
    }
    return ans;
    for (int i = 1; i <= n; ++ i)
    {
        for (int j = i + 2; j <= n; ++ j)
        {
            int dist = j - i;
            if(a[i] == dist || a[j] == dist)
            {
                int other = a[i] + a[j] - dist;
                int pos = i + other;
                int is = 0;
                if(i < pos && pos < j && a[pos] == j - pos)
                {
                    is = 1;
                    ans ++;
                }
                pos = j - other;
                if(is && pos == i + other)continue;
                if(i < pos && pos < j && a[pos] == pos - i)ans ++;
            }
            else
            {
                if(a[i] + a[j] == dist)
                {
                    int pos = i + a[i];
                    int is = 0;
                    if(i < pos && pos < j && a[pos] == dist)
                    {
                        is = 1;
                        ans ++;
                    }
                    pos = j - a[i];
                    if(is && pos == i + a[i])continue;
                    if(i < pos && pos < j && a[pos] == dist)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...