제출 #102450

#제출 시각아이디문제언어결과실행 시간메모리
102450user202729Xylophone (JOI18_xylophone)C++17
0 / 100
5 ms384 KiB
#include "xylophone.h"

#include<vector>
#include<algorithm>

void solve(int n){
	if(n<=2){
		answer(1,1);
		if(n==2)
			answer(2,2);
		return;
	}

	std::vector<int> ans(n);
	int lastdiff=ans[1]=query(1,2);
	int lastsign=1;
	for(int i=2;i<n;++i){
		int diff=query(i,i+1);
		int sign=lastsign;
		if(lastdiff+diff>=n||query(i-1,i+1)!=lastdiff+diff)
			sign=-sign;
		ans[i]=ans[i-1]+sign*diff;

		lastsign=sign;
		lastdiff=diff;
	}

	int offset=1-*std::min_element(begin(ans),end(ans));
	for(int& x:ans)x+=offset;

	if(ans[0]>ans.back())
		for(int& x:ans)x=n+1-x;

	for(int i=0;i<n;++i)
		answer(i+1,ans[i]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...