刷1600分题的时候发现一道交互题,以前没有练过。
cf 719 f1
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
const int maxn=1e5+10;
int T,n,t,k;
int query(int l,int r){
cout<<"? "<<l<<" "<<r<<'\n';
fflush(stdout);
int x;
cin>>x;
return x;
}
bool check(int cur){
if(cur-query(1,cur)>=k) return true;
return false;
}
void solve(){
cin>>n>>k;cin>>k;
int l=1,r=n;
while(l+1<r){
int mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid;
}
if(check(l)) cout<<"! "<<l<<endl;
else cout<<"! "<<r<<endl;
}
signed main()
{
solve();
//for(;;);
return 0;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void solve(){
int l=1,r=1e9+1;
while(l<=r){
int mid=(l+r)>>1;
cout<<mid<<endl;
fflush(stdout);
int res;cin>>res;
if(!res) return ;
else if(res==-1) l=mid+1;
else if(res==1) r=mid-1;
}
}
signed main()
{
solve();
//for(;;);
return 0;
}
两道题都是交互+二分