Submission #1250940

#TimeUsernameProblemLanguageResultExecution timeMemory
1250940fv3Triple Peaks (IOI25_triples)C++20
19.50 / 100
2095 ms1864 KiB
#include "triples.h"
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

#define all(x) x.begin(), x.end()

ll count_triples(vector<int> H) {
    const int N = H.size();
    ll res = 0;
 
    for (int i = 0; i < N; i++) {
        for (int j = i + 2; j < N; j++) {
            int mx_dist = j - i;
 
            if (H[i] > mx_dist || H[j] > mx_dist) continue;
 
            if (H[i] == mx_dist && H[j] == mx_dist) continue;
 
            if (H[i] == mx_dist) {
                if (H[i + H[j]] == H[i] - H[j]) res++;
                if (j - H[j] != i + H[j] && H[j - H[j]] == H[i] - H[j]) res++;
            } else if (H[j] == mx_dist) {
                if (H[i + H[i]] == H[j] - H[i]) res++;
                if (j - H[i] != i + H[i] && H[j - H[i]] == H[j] - H[i]) res++;
            } else if (H[i] + H[j] == mx_dist) {
                if (H[i + H[i]] == mx_dist) res++;
                if (H[i] != H[j] && H[i + H[j]] == mx_dist) res++;
            }
        }
    }
    return res;
}

vector<int> construct_range(int M, int K) {
    random_device rd;

    vector<int> best;
    ll best_score = 0;

    for (int N = 3; N <= M; N++) {
        for (int i = 0; i < 1000; i++) {
            mt19937 mt(rd());
            vector<int> H(M);
            for (int j = 0; j < M; j++) {
                H[j] = mt() % (M - 1) + 1;
            }
            ll score = count_triples(H);
            if (score > best_score) {
                best_score = score;
                best = H;
            }
        }
    }
    
    return best;
}

//#include "grader.cpp"
#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...