| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1290820 | ecen30 | 3개의 봉우리 (IOI25_triples) | C++20 | 0 ms | 0 KiB |
//testing AI code
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Part I: Count mythical triples
long long count_triples(const std::vector<int>& H) {
int N = H.size();
long long result = 0;
// Brute-force
for (int i = 0; i < N; ++i) {
for (int j = i+1; j < N; ++j) {
for (int k = j+1; k < N; ++k) {
std::vector<int> dists = {j-i, k-i, k-j};
std::vector<int> heights = {H[i], H[j], H[k]};
std::sort(dists.begin(), dists.end());
std::sort(heights.begin(), heights.end());
if (dists == heights)
result++;
}
}
}
return result;
}
// Part II: Construct range with many mythical triples (naive version)
std::vector<int> construct_range(int M, int K) {
// Example: just construct a strictly increasing sequence
int N = min(M, 10); // For demonstration, use up to 10 peaks
std::vector<int> H(N);
for (int i = 0; i < N; ++i)
H[i] = i+1; // Heights: 1,2,3,...,N
return H;
}
// Main function to use grader format for both parts
int main() {
int mode;
cin >> mode;
if (mode == 1) {
// Part I
int N;
cin >> N;
std::vector<int> H(N);
for (int i = 0; i < N; ++i)
cin >> H[i];
long long ans = count_triples(H);
cout << ans << endl;
} else if (mode == 2) {
// Part II
int M, K;
cin >> M >> K;
std::vector<int> H = construct_range(M, K);
cout << H.size();
for (int x : H) cout << " " << x;
cout << endl;
}
return 0;
}
