Submission #1250947

#TimeUsernameProblemLanguageResultExecution timeMemory
1250947fv3Triple Peaks (IOI25_triples)C++20
22.78 / 100
2096 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 i = 0; i < 200000 / M; i++) {
        mt19937 mt(rd());
        vector<int> H(M);
        for (int j = 0; j < M; j++) {
            H[j] = mt() % (3) + 1;
        }
        ll score = count_triples(H);
        if (score > best_score) {
            best_score = score;
            best = H;
        }
    }

    //cerr << best_score << "\n";
    
    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...