QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#106827 | #6394. Turn on the Light | whatever# | WA | 2ms | 3652kb | C++17 | 2.5kb | 2023-05-19 14:07:10 | 2023-05-19 14:07:13 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##end=(b);i<=i##end;++i)
#define per(i,a,b) for(int i=(a),i##end=(b);i>=i##end;--i)
mt19937 Rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
template<typename T>void chkmax(T&x,const T&y){if(x<y)x=y;}
template<typename T>void chkmin(T&x,const T&y){if(y<x)x=y;}
#define pb push_back
#define ALL(x) (x).begin(),(x).end()
#define mem(x) memset((x),0,sizeof(x))
typedef double db;
typedef long long ll;
typedef vector<int>vi;
typedef pair<int,int>pii;
typedef unsigned u32;
typedef unsigned uint;
typedef unsigned long long u64;
namespace orzjk{
const int SZ=1e6;
char buf[SZ],*p1=buf,*p2=buf;
char nc(){
return p1==p2&&(p2=(p1=buf)+fread(buf,1,SZ,stdin),p1==p2)?EOF:*p1++;
}
char fub[SZ],*p3=fub,*p4=fub+SZ;
void pc(char c){
p3==p4&&(fwrite(fub,1,SZ,stdout),p3=fub);
*p3++=c;
}
void flush(){
fwrite(fub,1,p3-fub,stdout),p3=fub;
}
}
using orzjk::nc;
using orzjk::pc;
//#define nc getchar
//#define pc putchar
int read(){
int x=0,f=1;char c=nc();
while(c<48)c=='-'&&(f=-1),c=nc();
while(c>47)x=x*10+(c^48),c=nc();
return x*f;
}
template<class T>void write(T x){
static char st[41];
if(!x)return pc(48),void();
char*p=st;
if(x<0)x=-x,pc('-');
for(;x;x/=10)*p++=x%10|48;
do{
pc(*--p);
}while(p!=st);
}
//const int P=1e9+7;
const int P=998244353;
int qp(int a,int k){
int res=1;for(;k;k>>=1,a=1ll*a*a%P)if(k&1)res=1ll*res*a%P;return res;
}
const int maxn=1e6+10;
int n;
int goal;
int cnt;
int ask(int v){
printf("? %d\n",v);
fflush(stdout);
// cnt++;
if(1){
int x;
scanf("%d",&x);
return x;
}else{
static bool vis[maxn];
vis[v]=1;
int s=0;
rep(i,1,goal-1)s+=vis[i];
rep(i,goal+1,n)s-=vis[i];
return abs(s);
}
}
void ret(int x){
if(1){
printf("! %d\n",x);
fflush(stdout);
}
// cerr<<cnt<<endl;
exit(0);
}
void solve(){
cin>>n;
// cin>>goal;
int l=1,r=n,dt=0;
while(1){
int mid=(l+r)/2;
int a=ask(mid);
int b=ask(r);
if(a==dt){
ret(mid);
}
if(b==1+dt){
ret(r);
}
if(b==dt){
l=mid+1,r=mid-1;
}
if(b==2+dt){
r=mid-1;
dt+=2;
}
}
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
// int T;cin>>T;while(T--)solve();
solve();
orzjk::flush();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3596kb
input:
3 1 1
output:
? 2 ? 3 ! 3
result:
ok Correct position at 3
Test #2:
score: -100
Wrong Answer
time: 2ms
memory: 3652kb
input:
10 1 0 0 1
output:
? 5 ? 10 ? 5 ? 4 ! 5
result:
wrong answer Wrong answer, more than 1 possible light!