제출 #1352262

#제출 시각아이디문제언어결과실행 시간메모리
1352262d4n13l3개의 봉우리 (IOI25_triples)C++20
26.76 / 100
2095 ms12824 KiB
#include "triples.h"
#include <bits/stdc++.h>
using ll = long long;

using namespace std;

long long count_triples(std::vector<int> h) {
    int n = h.size();
    vector <pair <int, int> > a;
    set <pair <int, int> > s;
    for (int i = 0; i < n; i++) {
        a.push_back({h[i],i});
        s.insert({h[i], i});
    }
    sort(a.begin(), a.end());
    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            if (j>=n) {
                break;
            }
            bool one = false, two = false;
            if (h[i]==j-i) {
                if (s.count({h[j]+i-j, h[j]+i})) {
                    ans++;
                    one = true;
                }
                if (s.count({h[j]+j-i, h[j]+j})) {
                    ans++;
                }
            }
            if (h[j]==j-i and h[i]!=h[j]) {
                if (s.count({h[i]+i-j, h[i]+i})) {
                    ans++;
                    two = true;
                }
                if (s.count({h[i]+j-i, h[i]+j})) {
                    ans++;
                }
            }
            if (s.count({j-i, h[i]+i}) and h[i]+i==h[j]+j and !two) {
                ans++;
            }
            if (s.count({j-i, h[i]+j}) and h[j]+i==h[i]+j and !one){
                ans++;
            }
        }
    }
    return ans;
}

int maxn = 5, big = 0;
vector <int> ans;

void call(vector <int> v) {
    if (v.size()>0 and v[0]>1) {
        return;
    }
    if (v.size()>1 and v[1]>2) {
        return;
    }
    if (v.size()==maxn) {
        ll x = count_triples(v);
        if (x>big) {
            ans=vector <int> (maxn);
            for (int i = 0; i < maxn; i++) {
                ans[i]=v[i];
            }
            big = x;
        }
    } else {
        for (int i = 1; i <= maxn-1; i++) {
            vector <int> vs;
            for (int j = 0; j < v.size(); j++) {
                vs.push_back(v[j]);
            }
            vs.push_back(i);
            call(vs);
        }
    }
}

vector <int> v= {2, 3, 4, 1, 2, 1, 3};

std::vector<int> construct_range(int m, int k) {
    //call({});
    //cout << big << endl;
    vector <int> an;
    for (int i = 0; i < m; i++) {
        an.push_back(v[i%7]);
        //cout << v[i%9] << " ";
    }
    //cout << endl;
    return an;
}
#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...