QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#883350#9734. Identify ChordChendaqianCompile Error//C++143.7kb2025-02-05 15:59:172025-02-05 15:59:27

Judging History

This is the latest submission verdict.

  • [2025-02-05 15:59:27]
  • Judged
  • [2025-02-05 15:59:17]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;

void Solve(int n);
int Ask(int x, int y);
void Report(int x, int y);

#define onlinejudge 
#ifdef onlinejudge

namespace grader {
	long long read() {
		long long o=0,w=1;char c=getchar();
		while(c<'0'||c>'9') {if(c=='-') w=-1;c=getchar();}
		while(c>='0'&&c<='9') {o=o*10+c-'0';c=getchar();}
		return o*w;
	}
	int Ask(int x, int y) {
		if (x == y) return 0;
		if ((x - y + n) % n == 1 || (y - x + n) % n == 1) return 1;
		printf("? %d %d\n", x, y);
		fflush(stdout);
		return read();
	}
	void Report(int x, int y) {
		printf("! %d %d\n", x, y);
		fflush(stdout);
		if (read() != -1) exit(0);
	}
	int main() {
		int T = read();
		while (T--) {
			solve(n);
		}
		return 0;
	}
}
int Ask(int x, int y) {
	return grader::Ask(x, y);
}
void Report(int x, int y) {
	grader::Report(x, y);
}
int main() {
	return grader::main();
}

#else

namespace grader {
	long long read() {
		long long o=0,w=1;char c=getchar();
		while(c<'0'||c>'9') {if(c=='-') w=-1;c=getchar();}
		while(c>='0'&&c<='9') {o=o*10+c-'0';c=getchar();}
		return o*w;
	}
	int n, sx, sy, cnt, fl1;
	int dis(int x, int y) {
		return min((x - y + n) % n, (y - x + n) % n);
	}
	int Ask(int x, int y) {
		if (x == y) return 0;
		if ((x - y + n) % n == 1 || (y - x + n) % n == 1) return 1;
		int res = min({dis(x, y), dis(x, sx) + dis(y, sy) + 1, dis(x, sy) + dis(y, sx) + 1});
		fprintf(stderr, "Ask(%d, %d): %d;\n", x, y, res);
		if (++cnt > 40) {
			fprintf(stderr, "WA! Too many queries!\n");
			exit(1);
		}
		return res;
	}
	void Report(int x, int y) {
		fprintf(stderr, "Report(%d, %d);\n", x, y);
		if (x > y) swap(x, y);
		if (x != sx || y != sy) {
			fprintf(stderr, "WA! You Return (%d, %d).\n", x, y);
			exit(1);
		}
		fl1 = 1;
	}
	int main() {
		int T = read();
		while (T--) {
			n = read(), sx = read(), sy = read();
			if (sx > sy) swap(sx, sy);
			cnt = 0, fl1 = 0;
			Solve(n);
			if (!fl1) {
				fprintf(stderr, "WA! No return!\n");
				exit(1);
			}
			cerr << "OK!\n";
		}
		return 0;
	}
}
int Ask(int x, int y) {
	return grader::Ask(x, y);
}
void Report(int x, int y) {
	grader::Report(x, y);
}
int main() {
	return grader::main();
}

#endif

void Solve(int n) {
	auto dis=[&](int x,int y) {
		return min((x-y+n)%n,(y-x+n)%n);
	};
	auto pre=[&](int x,int k) {
		return (x-1-k+n)%n+1;
	};
	auto suf=[&](int x,int k) {
		return (x-1+k)%n+1;
	};
	int sx=0,sy=0,d=0;
	bool fd=0;
	for(int i:{1,n,2}) {
		for(int j=n/2;j<=(n+1)/2;j++) {
			sx=i,sy=suf(i,j);
			d=Ask(sx,sy);
			if(d!=dis(sx,sy)) {
				fd=1;
				break;
			}
		}
		if(fd) break;
	}
	if(sx>sy) swap(sx,sy);
	if(d==1) {
		Report(sx,sy);
		return;
	}
	// cerr<<d<<'\n';
	int delt=dis(sx,sy)-d;
	// cerr<<sx<<' '<<sy<<' '<<delt<<'\n';
	int d1=Ask(pre(sx,1),sy),e1=Ask(sx,pre(sy,1));
	int d2=Ask(suf(sx,1),sy),e2=Ask(sx,suf(sy,1));
	// cerr<<d1<<' '<<d2<<'\n';
	// cerr<<e1<<' '<<e2<<'\n';
	int rt=0,pd=0;
	if(d1==d2) rt=sx,pd=delt+1;
	else if(e1==e2) rt=sy,pd=delt+1;
	else if(d1<d2) {
		// cerr<<"toL\n";
		int l=1,r=(sx-sy+n)%n,res=0;
		while(l<=r) {
			int mid=(l+r)/2,x=pre(sx,mid);
			if(dis(x,sy)==Ask(x,sy)+delt) res=mid,l=mid+1;
			else r=mid-1;
		}
		rt=pre(sx,res);
		if(e1<e2) pd=d-dis(rt,sx)-1+dis(rt,sy);
		else pd=delt+1;
	} else {
		// cerr<<"toR\n";
		int l=1,r=(sy-sx+n)%n,res=0;
		while(l<=r) {
			int mid=(l+r)/2,x=suf(sx,mid);
			if(dis(x,sy)==Ask(x,sy)+delt) res=mid,l=mid+1;
			else r=mid-1;
		}
		rt=suf(sx,res);
		if(e1>e2) pd=d-dis(rt,sx)-1+dis(rt,sy);
		else pd=delt+1;
	}
	// cerr<<rt<<' '<<pd<<'\n';
	if(Ask(rt,pre(rt,pd))==1) Report(rt,pre(rt,pd));
	else Report(rt,suf(rt,pd));
}

/*
cd QOJ9734
g++ a.cpp -o a -std=c++14 -Wall -O2
time ./a
*/

Details

answer.code: In function ‘int grader::Ask(int, int)’:
answer.code:20:30: error: ‘n’ was not declared in this scope
   20 |                 if ((x - y + n) % n == 1 || (y - x + n) % n == 1) return 1;
      |                              ^
answer.code: In function ‘int grader::main()’:
answer.code:33:31: error: ‘n’ was not declared in this scope
   33 |                         solve(n);
      |                               ^
answer.code:33:25: error: ‘solve’ was not declared in this scope; did you mean ‘Solve’?
   33 |                         solve(n);
      |                         ^~~~~
      |                         Solve