#include "xylophone.h"
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define MP make_pair
#define PB push_back
using ll = long long;
using ld = long double;
using pi = pair<int, int>;
using pll = pair<ll, ll>;
template<typename T>
using vec = vector<T>;
template<typename T, int N>
using arr = array<T, N>;
ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }
ll lcm(ll a, ll b) { return a * b / gcd(a, b); }
const int INF = 1e9 + 7;
void solve(int N)
{
vec<int> ans(N + 1), a(N), b(N - 1);
for (int i = 1; i < N - 1; i++)
{
a[i] = query(i, i + 1);
b[i] = query(i, i + 2);
}
a[N - 1] = query(N - 1, N);
auto f = [&](int i) {
int x = a[i - 2];
int y = a[i - 1];
int z = b[i - 2];
if (ans[i - 2] < ans[i - 1])
{
if (z != x + y) ans[i] = ans[i - 1] - y;
else ans[i] = ans[i - 1] + y;
}
else
{
if (z != x + y) ans[i] = ans[i - 1] + y;
else ans[i] = ans[i - 1] - y;
}
};
auto g = [&](int i) {
int x = a[i + 2];
int y = a[i + 1];
int z = b[i + 2];
if (ans[i + 2] < ans[i + 1])
{
if (z != x + y) ans[i] = ans[i + 1] - y;
else ans[i] = ans[i + 1] + y;
}
else
{
if (z != x + y) ans[i] = ans[i + 1] + y;
else ans[i] = ans[i + 1] - y;
}
};
for (int i = 1; i < N; i++)
{
vec<bool> v(N + 1);
ans[i] = 1;
v[1] = 1;
ans[i + 1] = 1 + a[i];
ans[i - 1] = 1 + a[i - 1];
bool o = 1;
for (int j = i + 2; o && j <= N; j++)
{
f(j);
if (ans[j] < 1 || ans[j] > N || v[ans[j]])
{
o = 0;
break;
}
v[ans[j]] = 1;
}
for (int j = i - 2; o && j >= 1; j--)
{
g(j);
if (ans[j] < 1 || ans[j] > N || v[ans[j]])
{
o = 0;
break;
}
v[ans[j]] = 1;
}
if (o) break;
}
for (int i = 1; i <= N; i++)
answer(i, ans[i]);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |