제출 #763118

#제출 시각아이디문제언어결과실행 시간메모리
763118vjudge1Xylophone (JOI18_xylophone)C++17
100 / 100
87 ms444 KiB
#include <bits/stdc++.h>
#include "xylophone.h"

using namespace std;

const int NM = 5000;

int p[NM+5], q[NM+5];
bool used[NM+5];

void process(int p[NM+5], int i, int x, int y){
	if (p[i-2] < p[i-1]){
		if (p[i-1]-x < p[i-2]){
			if (y == x){
				p[i] = p[i-1]-x;
			}
			else{
				p[i] = p[i-1]+x;
			}
		}
		else{
			if (y == p[i-1]-p[i-2]){
				p[i] = p[i-1]-x;
			}
			else{
				p[i] = p[i-1]+x;
			}
		}
	}
	else{
		if (p[i-1]+x > p[i-2]){
			if (y == x){
				p[i] = p[i-1]+x;
			}
			else{
				p[i] = p[i-1]-x;
			}
		}
		else{
			if (y == p[i-2]-p[i-1]){
				p[i] = p[i-1]+x;
			}
			else{
				p[i] = p[i-1]-x;
			}
		}
	}
}

void modify(int N, int p[NM+5]){
	int mn = p[1];
	for (int i = 2; i <= N; i++)
		mn = min(mn, p[i]);
	for (int i = 1; i <= N; i++)
		p[i] += 1-mn;
}

bool ok(int N, int p[NM+5]){
	memset(used, 0, sizeof(used));
	int a, b;
	for (int i = 1; i <= N; i++){
		if (used[p[i]]) return 0;
		used[p[i]] = 1;
		if (p[i] == 1) a = i;
		if (p[i] == N) b = i;
	}
	return a < b;
}

void output(int N, int p[NM+5]){
	for (int i = 1; i <= N; i++)
		answer(i, p[i]);
}

void solve(int N){
	p[1] = 0;
	p[2] = query(1, 2);
	q[2] = -p[2];
	for (int i = 3; i <= N; i++){
		int x = query(i-1, i), y = query(i-2, i);
		process(p, i, x, y);
		process(q, i, x, y);
	}
	modify(N, p);
	modify(N, q);
	if (!ok(N, q)){
		output(N, p);
		return;
	}
	if (!ok(N, p)){
		output(N, q);
		return;
	}
	for (int i = 1; i <= N; i++){
		int mxp = p[i], mnp = p[i], mxq = q[i], mnq = q[i];
		for (int j = i+1; j <= N; j++){
			mxp = max(mxp, p[j]);
			mnp = min(mnp, p[j]);
			mxq = max(mxq, q[j]);
			mnq = min(mnq, q[j]);
			if ((mxp-mnp) != (mxq-mnq)){
				if (query(i, j) == mxq-mnq){
					output(N, q);
					return;
				}
				else{
					output(N, p);
					return;
				}
			}
		}
	}
}

컴파일 시 표준 에러 (stderr) 메시지

xylophone.cpp: In function 'bool ok(int, int*)':
xylophone.cpp:67:13: warning: 'b' may be used uninitialized in this function [-Wmaybe-uninitialized]
   67 |  return a < b;
      |             ^
xylophone.cpp:67:13: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...