제출 #1348620

#제출 시각아이디문제언어결과실행 시간메모리
1348620Zone_zoneeXylophone (JOI18_xylophone)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
#include "xylophone.h"

static int a[5000];

void solve(int N) {
	std::pair<int, int> mx = {-1e9, -1}, mn = {1e9, -1};
	a[1] = 1;
	a[2] = query(1, 2)-1;
	mx = std::max(mx, {a[1], 1});
	mn = std::min(mn, {a[1], 1});
	mx = std::max(mx, {a[2], 2});
	mn = std::min(mn, {a[2], 2});
	for(int i = 3; i <= N; ++i){
		int res = query(i-1, i);
		int tres = query(i-2, i);
		if(tres == abs(a[i-1]-a[i-2])){
			if(a[i-1] > a[i-2]) a[i] = a[i-1] - res;
			else a[i] = a[i-1] + res;
		}else if(tres == abs(a[i-1] - a[i-2]) + res){
			if(a[i-1] > a[i-2]) a[i] = a[i-1] + res;
			else a[i] = a[i-1] - res;
		}else{
			if(a[i-1] > a[i-2]) a[i] = a[i-1] - res;
			else a[i] = a[i-1] + res;
		}
		mx = std::max(mx, {a[i], i});
		mn = std::min(mn, {a[i], i});
	}
	for(int i = 1; i <= N; ++i) a[i] += std::max(0, -mn.first+1);
	if(mn.second > mx.second){
		for(int i = 1; i <= N; ++i) answer(i, N-a[i]+1);
	}else{
		for(int i = 1; i <= N; ++i) answer(i, a[i]);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...