QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#883350 | #9734. Identify Chord | Chendaqian | Compile Error | / | / | C++14 | 3.7kb | 2025-02-05 15:59:17 | 2025-02-05 15:59:27 |
Judging History
This is the latest submission verdict.
- [2025-02-05 15:59:27]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [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
*/
详细
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