제출 #1159015

#제출 시각아이디문제언어결과실행 시간메모리
1159015thelegendary08Xylophone (JOI18_xylophone)C++17
0 / 100
0 ms416 KiB
#include "xylophone.h"
#include<bits/stdc++.h>
using namespace std;
static int A[5000];

void solve(int N) {
	vector<int>v;
	for(int i = 1; i<N; i++){
		v.push_back(query(i, i+1));
	}
	vector<int>w;
	for(int i = 1; i<N-1; i++){
		v.push_back(query(i, i+2));
	}
	vector<int>sgn(N-1, 1);
	for(int i = 0; i<N-2; i++){
		if(w[i] == v[i] + v[i+1])sgn[i+1] = sgn[i];
		else sgn[i+1] = -sgn[i];
	}
	vector<int> nums(N);
	for(int i = 1; i<N; i++){
		if(sgn[i-1] == 1){
			nums[i] = nums[i-1] + v[i];
		}
		else nums[i] = nums[i-1] - v[i];
	}
	int mxd = 0;
	int mx = -1;
	int mnd = 0;
	int mn = 1e9;
	for(int i = 0; i<N; i++){
		if(v[i] < mn){
			mn = nums[i];
			mnd = i;
		}
		if(v[i] > mx){
			mx = nums[i];
			mxd = i;
		}
	}
	if(mnd > mxd){
		for(int i = 0; i<N-1; i++)sgn[i] = -sgn[i];
	}
	nums[0] = 0;
	for(int i = 1; i<N; i++){
		if(sgn[i-1] == 1){
			nums[i] = nums[i-1] + v[i];
		}
		else nums[i] = nums[i-1] - v[i];
	}
	mxd = 0;
	mx = -1;
	mnd = 0;
	mn = 1e9;
	for(int i = 0; i<N; i++){
		if(v[i] < mn){
			mn = nums[i];
			mnd = i;
		}
		if(v[i] > mx){
			mx = nums[i];
			mxd = i;
		}
	}
	for(int i = 0; i<N; i++){
		nums[i] -= mn;
		nums[i]++;
	}
	for(int i = 1; i <= N; i++) {
		answer(i, nums[i-1]);
	}

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...