【题解】 CF1486C2 Guessing the Greatest (hard version)
题面传送门
解决思路
看到
所以考虑如何来二分。
首先,可以询问一次
然后再确定的区间里进行二分。以左边为例,初始
注意一个细节:当第一次询问结果为
AC Code
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
using namespace std;
int n,l,r,x,y,mid,ans;
bool fl;
void binary(int l,int r,int typ){
while(l<=r){
mid=(l+r)>>1;
int _1=min(x,mid),_2=x+mid-_1;
cout<<"? "<<_1<<" "<<_2<<endl;
cin>>y;
if((x==y)^typ) l=mid+1; //两种情况放一起了
else r=mid-1;
if(x==y) ans=mid; //更新ans
}
}
signed main(){
cin>>n;
cout<<"? 1 "<<n<<endl;
cin>>x;
if(x!=1){
cout<<"? 1 "<<x<<endl;
cin>>y;
if(y!=x) fl=1;
}
else fl=1;
if(fl) binary(x+1,n,1);
else binary(1,x-1,0);
cout<<"! "<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统