社区讨论

关于交互题的语言选择

P9599 [JOI Open 2018] 木琴 / Xylophone参与者 5已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@meybcm7g
此快照首次捕获于
2025/08/30 21:44
6 个月前
此快照最后确认于
2025/11/04 06:09
4 个月前
查看原帖
为什么同样一份代码,在 C++14 (GCC 9) 下全部测试点运行时错误,但是可以在 C++14 下通过?
其中运行时错误的反馈信息如下:
TEXT
Runtime Error.wrong answer Interactor Error

Received signal 11: Segmentation fault with invalid memory reference.
CPP
//the code is from chenjh
#ifdef ONLINE_JUDGE 
void solve(int N);
int query(int s, int t);
void answer(int i, int a);
#else
#include "xylophone.h"
#endif
#include<algorithm>
#define MAXN 5005
using namespace std;
int a[MAXN];
bool b[MAXN];
void solve(int N){
	int x;
	for(x=2;x<=N&&query(1,x)<N-1;x<<=1);
	x>>=1;
	for(int k=__lg(x)-1;k>=0;--k)if((x|(1<<k))<=N&&query(1,x|(1<<k))<N-1) x|=1<<k;
	++x;
	b[a[x]=N]=1;
	for(int i=x+1;i<=N;i++){
		int r1=query(i-1,i);
		if(0<a[i-1]-r1&&a[i-1]-r1<=N&&0<a[i-1]+r1&&a[i-1]+r1<=N){
			if(!b[a[i-1]-r1]&&!b[a[i-1]+r1]){
				int r2=query(i-2,i);
				int mx=max(a[i-2],a[i-1]),mn=min(a[i-2],a[i-1]);
				if(r2==max(mx,a[i-1]-r1)-min(mn,a[i-1]-r1)) b[a[i]=a[i-1]-r1]=1;
				else b[a[i]=a[i-1]+r1]=1;
			}
			else if(!b[a[i-1]-r1]) b[a[i]=a[i-1]-r1]=1;
			else if(!b[a[i-1]+r1]) b[a[i]=a[i-1]+r1]=1;
		}
		else if(0<a[i-1]-r1&&a[i-1]-r1<=N) b[a[i]=a[i-1]-r1]=1;
		else if(0<a[i-1]+r1&&a[i-1]+r1<=N) b[a[i]=a[i-1]+r1]=1;
	}
	for(int i=x-1;i>0;--i){
		int r1=query(i,i+1);
		if(0<a[i+1]-r1&&a[i+1]-r1<=N&&0<a[i+1]+r1&&a[i+1]+r1<=N){
			if(!b[a[i+1]-r1]&&!b[a[i+1]+r1]){
				int r2=query(i,i+2);
				int mx=max(a[i+2],a[i+1]),mn=min(a[i+2],a[i+1]);
				if(r2==max(mx,a[i+1]-r1)-min(mn,a[i+1]-r1)) b[a[i]=a[i+1]-r1]=1;
				else b[a[i]=a[i+1]+r1]=1;
			}
			else if(!b[a[i+1]-r1]) b[a[i]=a[i+1]-r1]=1;
			else if(!b[a[i+1]+r1]) b[a[i]=a[i+1]+r1]=1;
		}
		else if(0<a[i+1]-r1&&a[i+1]-r1<=N) b[a[i]=a[i+1]-r1]=1;
		else if(0<a[i+1]+r1&&a[i+1]+r1<=N) b[a[i]=a[i+1]+r1]=1;
	}
	for(int i=1;i<=N;i++) answer(i,a[i]);
}

回复

14 条回复,欢迎继续交流。

正在加载回复...