제출 #1352201

#제출 시각아이디문제언어결과실행 시간메모리
1352201d4n13l3개의 봉우리 (IOI25_triples)C++20
6 / 100
541 ms1980 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();
    ll ans = 0;
    //cout << n << endl;
    for (int i = 0; i < n; i++) {
        //cout << "i is " << i << " " << h[i] << endl;
        for (int j = i+1; j < i+11; j++) {
            for (int k = j+1; k < i+11; k++) {
                if (j>=n or k>= n) {
                    break;
                }
                vector <int> v1, v2;
                v1.push_back(j-i);
                v1.push_back(k-i);
                v1.push_back(k-j);
                v2.push_back(h[i]);
                v2.push_back(h[j]);
                v2.push_back(h[k]);
                sort(v1.begin(), v1.end());
                sort(v2.begin(), v2.end());
                if (v1[0]==v2[0] and v1[1]==v2[1] and v1[2]==v2[2]) {
                    //cout << i << " " << j << " " << k << endl;
                    ans++;
                }
            }
        }
    }
    return ans;
}

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

void call(vector <int> v) {
    if (v.size()==maxn) {
        int num = 0;
        for (int i = 0; i < maxn; i++) {
            for (int j = i+1; j < maxn; j++) {
                for (int k = j+1; k < maxn; k++) {
                    if (j>=maxn or k>= maxn) {
                        break;
                    }
                    vector <int> v1, v2;
                    v1.push_back(j-i);
                    v1.push_back(k-i);
                    v1.push_back(k-j);
                    v2.push_back(v[i]);
                    v2.push_back(v[j]);
                    v2.push_back(v[k]);
                    sort(v1.begin(), v1.end());
                    sort(v2.begin(), v2.end());
                    if (v1[0]==v2[0] and v1[1]==v2[1] and v1[2]==v2[2]) {
                        num++;
                    }
                }
            }
        }
        if (num>big) {
            ans=vector <int> (maxn);
            for (int i = 0; i < maxn; i++) {
                ans[i]=v[i];
            }
            big = num;
        }
    } 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);
        }
    }
}

std::vector<int> construct_range(int m, int k) {
    call({});
    cout << big << endl;
    for (int i = 0; i < maxn; i++) {
        cout << ans[i] << " ";
    }
    cout << endl;
    return {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...