| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1306999 | MunkhErdene | 3개의 봉우리 (IOI25_triples) | C++17 | 0 ms | 0 KiB |
#include "triples.h"
#include <bits/stdc++.h>
/*#ifdef LOCAL
#define dbg std::cout
#else
struct DebugDummy {
template<typename T>
DebugDummy& operator<<(const T&) { return *this; }
};
DebugDummy dbg;
#endif*/
//#define dbg cout
#define dbg cerr
using namespace std;
#define _ << ' ' <<
using ll = long long;
long long count_triples(std::vector<int> H) {
vector<ll> a({H.begin(), H.end()});
ll n = a.size();
ll ans = 0;
for(ll i = 0; i < n; i++) {
for(ll j = i + 2; j < n; j++){
auto [mx, mn] = make_pair(a[i], a[j]);
if(mn > mx) swap(mx, mn);
ll d = j - i;
if(mx > d) continue;
if(mx == d) {
ll cand1 = i + mn;
ll cand2 = j - mn;
if(cand1 == cand2) {
if(j - cand1 == a[cand1] && cand1 != j) {ans++; dbg << i _ cand1 _ j << '\n';}
continue;
}
if(j - cand1 == a[cand1] && cand1 != j) {ans++; dbg << i _ cand1 _ j << '\n';}
if(cand2 - i == a[cand2] && cand2 != i) {ans++; dbg << i _ cand2 _ j << '\n';}
}
else {
if(a[i] + a[j] != d) continue;
ll cand1 = i + mn;
ll cand2 = i + mx;
dbg << i _ j _ a[i] _ a[j] _ cand1 _ cand2 _ a[cand1] _ a[cand2] _ d<< '\n';
if(cand1 == cand2) {
if(a[cand1] == d) {ans++; dbg << i _ cand1 _ j << '\n';}
continue;
}
if(a[cand1] == d) {ans++; dbg << i _ cand1 _ j << '\n';}
if(a[cand2] == d) {ans++; dbg << i _ cand2 _ j << '\n';}
}
}
}
return ans;
}
std::vector<int> construct_range(int M, int K) {
return {1, 1, 1};
}
namespace {
void run_part1() {
int N;
assert(1 == scanf("%d", &N));
std::vector<int> H(N);
for (int i = 0; i < N; i++)
assert(1 == scanf("%d", &H[i]));
fclose(stdin);
long long T = count_triples(H);
printf("%lld\n", T);
fclose(stdout);
}
void run_part2() {
int M, K;
assert(2 == scanf("%d %d", &M, &K));
fclose(stdin);
std::vector<int> H = construct_range(M, K);
int N = H.size();
printf("%d\n", N);
for (int i = 0; i < N; i++)
printf("%d%c", H[i], " \n"[i + 1 == N]);
fclose(stdout);
}
} // namespace
int main() {
int part;
assert(1 == scanf("%d", &part));
if (part == 1)
run_part1();
else if (part == 2)
run_part2();
return 0;
}
