# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1190520 | Panda50O | Xylophone (JOI18_xylophone) | C++20 | 0 ms | 0 KiB |
#include "xylophone.h"
#include<bits/stdc++.h>
int B[5001];
int d1[5001], d2[5001];
void solve(int N) {
for(int i = 1; i <= N-1; ++i) {
d1[i] = query(i, i+1);
}
for(int i = 1; i <= N-2; ++i) {
d2[i] = query(i, i+2);
}
B[1] = 0;
B[2] = B[1] + d1[1];
for(int i = 3; i <= N; ++i) {
B[i] = B[i-1] + d1[i-1];
if(max({abs(B[i]-B[i-1]), abs(B[i]-B[i-2]), abs(B[i-1]-B[i-2])}) != d2[i-2]) {
B[i] = B[i-1] - d1[i-1];
}
}
int mn = 1e9;
for(int i = 1; i <= N; ++i) {
mn = min(mn, B[i]);
}
for(int i = 1; i <= N; ++i) {
B[i] += (1-mn);
}
for(int i = 1; i <= N; ++i) {
if(B[i] == 1) break;
else if(B[i] == N) {
for(int j = 1; j <= N; ++j) {
B[j] = N - B[j] + 1;
}
break;
}
}
for(int i = 1; i <= N; i++) {
answer(i, B[i]);
}
}
/*
5
1 5 3 4 2
*/