QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#106827#6394. Turn on the Lightwhatever#WA 2ms3652kbC++172.5kb2023-05-19 14:07:102023-05-19 14:07:13

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-19 14:07:13]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3652kb
  • [2023-05-19 14:07:10]
  • 提交

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!