제출 #444878

#제출 시각아이디문제언어결과실행 시간메모리
444878KhizriXylophone (JOI18_xylophone)C++17
100 / 100
86 ms640 KiB
#include "xylophone.h"
#include <bits/stdc++.h>
using namespace std;
static int arr[5005];
int dp[5005];
map<int,bool>mp;
void solve(int n) {
	int l=1,r=n,k;
	while(l<=r){
		int m=(l+r)/2;
		if(query(m,n)==n-1){
			l=m+1;
			k=m;
		}
		else{
			r=m-1;
		}
	}
	arr[k]=1;
	mp[1]=1;
	for(int i=k+1;i<=n;i++){
		int x=query(i-1,i);
		dp[i-1]=x;
		int a=arr[i-1]+x;
		int b=arr[i-1]-x;
		if(a<=0||a>n||mp[a]){
			arr[i]=b;
			mp[b]=1;
		}
		else if(b<=0||b>n||mp[b]){
			arr[i]=a;
			mp[a]=1;
		}
		else{
			int y=query(i-2,i);
			vector<int>vt{arr[i-2],arr[i-1],a};
			sort(vt.begin(),vt.end());
			if(vt[2]-vt[0]==y){
				arr[i]=a;
				mp[a]=1;
			}
			else{
				arr[i]=b;
				mp[b]=1;
			}
		}
	}
	for(int i=k-1;i>=1;i--){
		int x=query(i,i+1);
		dp[i+1]=x;
		int a=arr[i+1]+x;
		int b=arr[i+1]-x;
		if(a<=0||a>n||mp[a]){
			arr[i]=b;
			mp[b]=1;
		}
		else if(b<=0||b>n||mp[b]){
			arr[i]=a;
			mp[a]=1;
		}
		else{
			int y=query(i,i+2);
			vector<int>vt{arr[i+2],arr[i+1],a};
			sort(vt.begin(),vt.end());
			if(vt[2]-vt[0]==y){
				arr[i]=a;
				mp[a]=1;
			}
			else{
				arr[i]=b;
				mp[b]=1;
			}
		}
	}
	for(int i=1;i<=n;i++){
		answer(i,arr[i]);
	}
}

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

xylophone.cpp: In function 'void solve(int)':
xylophone.cpp:8:14: warning: 'k' may be used uninitialized in this function [-Wmaybe-uninitialized]
    8 |  int l=1,r=n,k;
      |              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...