当前位置: 首页 > news >正文

洛谷-P7998 [WFOI - 01] 猜数 题解

Solution

交互库自适应,也就是它会尽量使你的代码进行尽量多的交互,从而卡掉一些诸如随机化的做法。

显然我们需要通过询问不断缩小查找范围。假设当前已经确定 \(q\in [1,n]\),如果询问 \((l,r)\),那么交互库返回“比 \(l\) 大”或“比 \(r\) 小”就可以使下一轮区间长度为 \(\max(r-1,n-l)\),取到最大值。

于是有性质:询问的区间必须满足 \(r-1=n-l\)。否则可以拓展小的一边使 \(\max(r-1,n-l)\) 不变而区间长度增加,得到更优解。

\(1.9813035\) 这样的奇怪限制启发我们考虑 dp。设 \(f_i\) 为长度为 \(i\) 的区间确定唯一值的最小代价。若一次询问后区间长度缩减到 \(j\),则 \(l=i-j-1,r=j+1\)。于是转移方程为:

\[f_i=\min_{\left\lceil\frac{i-1}{2}\right\rceil\le j<i}f_j+\frac{1}{2j-i+2} \]

直接跑 dp 是 \(O(n^2)\) 的,期望得分 \(70\)

我们可以证明代价函数满足四边形不等式。因此 dp 具有决策单调性,二分队列算法可以在 \(O(n\log n)\) 复杂度内解决本题。

Code

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i(a);i<b;++i)
#define rept(i,a,b) for(int i(a);i<=b;++i)
#define db double
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
namespace{constexpr int N=1e5+5;deque<int> q;int n,l[N],r[N],g[N];db f[N];
}
inline const pii ask(int l,int r){cout<<"? "<<l<<' '<<r<<endl;pii res;cin>>res.fi>>res.se;return res;
}
inline void submit(int x){cout<<"! "<<x<<endl;exit(0);
}
inline db w(int j,int i){return f[j]+1.0/(2*j-i+2);
}
inline int rb(int i){  // i能更新到的最右边界return min(n,i<<1|1);
}
inline bool check(int i,int j){  // i是否能更新jreturn i<j&&rb(i)>=j;
}
int main(){cin>>n;if(n==1) submit(1);l[1]=2,r[1]=rb(1);q.push_back(1);rept(i,2,n){while(!q.empty()&&r[q.front()]<i) q.pop_front();g[i]=q.front();f[i]=w(g[i],i);while(!q.empty()&&check(i,l[q.back()])&&w(i,l[q.back()])<w(q.back(),l[q.back()])) q.pop_back();if(q.empty()){l[i]=i+1,r[i]=rb(i);q.emplace_back(i);}else if(!check(i,r[q.back()])||w(i,r[q.back()])>=w(q.back(),r[q.back()])){if(r[q.back()]<rb(i)){l[i]=r[q.back()]+1,r[i]=rb(i);q.emplace_back(i);}}else{int L=l[q.back()],R=r[q.back()],mid;while(L<R){mid=L+R>>1;if(check(i,mid)&&w(i,mid)<w(q.back(),mid)) R=mid;else L=mid+1;}r[q.back()]=L-1;l[i]=L,r[i]=rb(i);q.emplace_back(i);}}int L=1,R=n;while(true){if(L==R) submit(L);int t=R-L+1-1-g[R-L+1];pii res=ask(L+t,R-t);if(res.se==1) submit(res.fi);if(res.se==0) L=res.fi+1;else R=res.fi-1;}return 0;
}
http://www.jsqmd.com/news/817367/

相关文章:

  • 2025最权威的AI科研神器推荐
  • 三线制PT100测温,采集到的V5和V6电压怎么算温度?一个公式搞定
  • 径向基函数RBF在三维角色面部表情编辑中的应用实践
  • 如何在macOS上轻松运行Windows程序?Whisky完整指南
  • 2026年厦门GEO优化权威排名:核心数据深度解析与避坑指南 - 元点智创
  • 2026保险理赔纠纷处理指南:附全国顶尖律师事务所实力榜单 - 测评者007
  • 中山起名市场乱象梳理:选合规起名服务要避开这几个误区 - GrowthUME
  • 在 Node.js 后端服务中集成 Taotoken 实现多模型备选与自动降级
  • 视频无水印提取怎么操作?2026最新抖音快手短视频去水印方法教程 - 爱上科技热点
  • 3大核心突破,让暗黑破坏神2在现代PC上重获新生
  • 2026北京AI搜索优化三大服务商全面解析 - 余小铁
  • 应对高并发场景Taotoken的稳定性与路由策略实践
  • 小红书视频怎么保存不带水印?2026最全去水印方法与工具实测对比 - 爱上科技热点
  • 免费在线去水印软件推荐排行榜:2026实测哪款去除水印最好用? - 爱上科技热点
  • 开环电源的“伪稳定”与扰动失稳——从仿真看闭环控制的必要性
  • 2026年实验室离心机优质公司参考:四川诚邦浩然测控、专注实验室离心机研发生产覆盖冷冻、高速、常温、大容量全品类 - 海棠依旧大
  • 纸尿裤品牌哪家吸水性强:露安适安敏微气候系列强吸干爽 - 17329971652
  • Zemax红外镜头设计避坑指南:为什么我的非球面加了反而更糟?
  • 2026年Oerlikon锥齿轮磨削公司最新排行榜就选择:大昌洋行(上海)有限公司 - 品牌推广大师
  • 3分钟解锁视频自由:VideoDownloadHelper免费插件完整指南
  • Adafruit眼球动画系统:JSON配置与Arduino开发全解析
  • 2026年内蒙古发电机出租参考指南:内蒙古蒙强机电、发电机出租、发电车租赁,以可靠服务保障临时供电需求 - 海棠依旧大
  • 不勒肚子的纸尿裤品牌推荐:露安适安敏微气候系列贴身舒适 - 13724980961
  • ElevenLabs有声书全流程拆解(含版权规避+ACX合规清单):2024最新审核通过率提升至91.2%
  • wpr_simulation:解决ROS机器人开发硬件依赖痛点的完整仿真方案
  • 开源OpenAI用量查询工具部署指南:实现API成本透明化管理
  • 告别OrthoFinder限制:手把手教你用IQtree+Notung搞定复杂基因家族的有根树分析
  • 抖音直播怎么无水印保存?2026年抖音实况无水印保存方法测评与工具对比 - 爱上科技热点
  • 泛微OA检测工具-WeaverScan(三)
  • Traymond 终极指南:如何用 1 个快捷键让 Windows 桌面瞬间清爽?