Submission #1230987

#TimeUsernameProblemLanguageResultExecution timeMemory
1230987yixuan19Xylophone (JOI18_xylophone)C++20
100 / 100
26 ms472 KiB
#include <bits/stdc++.h>
#include "xylophone.h"
static int A[5000];

using namespace std;

void solve(int N) {
	vector<int> doubles;
	vector<int> triples;
	vector<int> dir;
	vector<int> sol;
	dir.push_back(1);
	sol.push_back(0);
	for(int i = 1; i < N; ++i){
		doubles.push_back(query(i,i+1));
	}
	for(int i = 1; i < N-1; ++i){
		triples.push_back(query(i,i+2));
	}

	for (int i = 0; i < N-2; ++i){
		if (doubles[i] + doubles[i+1] == triples[i]){
			dir.push_back(dir[dir.size()-1]);
		}else{
			dir.push_back(-dir[dir.size()-1]);
		}
	}
	for (int i = 0; i < N-1; ++i){
		sol.push_back(sol[sol.size()-1] + dir[i]*doubles[i]);
	}
	int min_index, mini, max_index, maxi;
	mini = 1e9;
	maxi = -1e8;
	for (int i = 0; i < N; ++i){
		if (sol[i] < mini){
			mini = sol[i];
			min_index = i;
		}
		if (sol[i]> maxi){
			maxi = sol[i];
			max_index = i;
		}
	}
	if (max_index < min_index){
		for (int i = 0; i < N; ++i){
			sol[i] = -sol[i];
		}
	}
	mini = 1e9;
	for (int i = 0; i < N; ++i){
		if (sol[i] < mini){
			mini = sol[i];
			min_index = i;
		}
	}
	int decalage = abs(mini-1);
	// for (int i: sol){
	// 	cout<<i<<endl;
	// }
	for (int i = 0; i < N; ++i){
		answer(i+1,sol[i] + decalage);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...