QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#106826 | #6394. Turn on the Light | whatever# | TL | 0ms | 0kb | C++17 | 2.5kb | 2023-05-19 14:06:09 | 2023-05-19 14:06:11 |
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,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: 0
Time Limit Exceeded
input:
3