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

codeforce二分题目

2156B. Strange Machine

没错就是这道题,我看见二分的标签,但是我的做法完全是暴力模拟。我看不来哪里二分。。。。

可以得到答案但是会超时。

我主要的问题是不知道哪里二分。这个问题我需要解决。

题目的中文翻译------------------------------------------------------------------------------------------------------------

题意很简单 就是一个环,输入一个数num,有n台机器,A机器num--,B机器num/=num;

所以二分哪里??接着看num的大小会影响ans。num大ans就大了。因为操作的步数量增加了。

ans有单调性质吗??我操作n步num就等于0了,那n+1步还是0;n-1步就不是0;所以我二分步数。check(步数)==0;check就是我想设计一个函数让这个步数尽量的小。所以l=0;那r=???

这也是我遇到的问题。。现在的我好菜。r=最大的步数。嗯。。。那全是A机器每次就减一,不除二。最多20台机器题目有,输入的数最大是1e9;那r=20*1e9;

AI:—————————————————————————————————————————

优化后的内容:

题意可简化为:在一个环形结构中,给定初始数num和n台机器。机器A执行num--操作,机器B执行num/=2操作。

关于二分法的应用:

  1. 关键问题在于num的大小会影响最终结果ans。num越大,ans也越大,因为操作步骤会增加。
  2. 我们需要验证ans是否具有单调性:当操作n步后num=0,那么n+1步时仍为0;但n-1步时则不为0。因此可以采用二分法来验证步数。
  3. 设计check(步数)==0函数,目标是找到最小的可行步数。初始设置l=0,但如何确定r?

遇到的问题:

  • r的取值应为最大可能步数。考虑最坏情况:全部使用A机器(每次仅减1),且题目规定最多20台机器,输入最大值1e9。因此r=20*1e9。

以下是代码—————————————————————————————————————

#include<iostream> #include<string> #include<vector> using namespace std; long long yiquan(long long x,const string& ji,int n){ for(int i=0;i<n&&x>0;i++){ if(ji[i]=='A'){ x--; } else x/=2; } return x; } long long bushu(long long x,long long step,const string& ji,int n){ if(step==0||x==0)return x; long long wan=step/n; long long shen=step%n; for(int i=0;i<wan&&x>0;i++){ long long nex=yiquan(x,ji,n); if(nex==x)break; x=nex; } for(int i=0;i<shen&&x>0;i++){ if(ji[i]=='A')x--; else if(ji[i]=='B')x/=2; } return x; } int main(){ ios::sync_with_stdio(false); int t; cin >> t; while(t--){ int n, q; cin >> n >> q; string ji; cin >> ji; vector<long long> num(q); for(int i = 0; i < q; i++){ cin >> num[i]; } for(int i = 0; i < q; i++){ long long x=num[i]; long long l=0,r=1e12; while(l<r){ long long mid=(l+r)/2; if(bushu(x,mid,ji,n)==0){ r=mid; } else l=mid+1; } cout<<l<<'\n'; } } return 0; }

没错超时了哈哈哈---------------------------------------------------------------------------------------------------

为啥会超时:全是A机器md

#include<iostream> #include<string> #include<vector> using namespace std; // 计算经过一圈的效果 void one_cycle(long long& x, const string& ji, int n, long long& cntA_in_cycle) { cntA_in_cycle = 0; for(int i = 0; i < n && x > 0; i++) { if(ji[i] == 'A') { x--; cntA_in_cycle++; } else { x /= 2; } } } long long calc(long long x, long long steps, const string& ji, int n) { if(steps == 0 || x == 0) return x; long long full_cycles = steps / n; int remainder = steps % n; long long cntA; // 关键优化:如果x很大,先快速跳过前面的圈 while(full_cycles > 0 && x > 0) { long long old_x = x; one_cycle(x, ji, n, cntA); full_cycles--; // 如果这一圈全是A if(cntA == n) { // 剩下的全A圈可以直接计算 // 每圈减n,需要 ceil(x/n) 圈变成0 if(x > full_cycles * n) { x -= full_cycles * n; full_cycles = 0; } else { return 0; // 在full_cycles圈内就会变成0 } break; } // 如果值不再变化,跳出 if(x == old_x) break; // 如果x变得很小,继续循环也不会太多次 if(x < n * 100) break; // 小数字直接交给后面的循环处理 } // 处理剩余的完整圈(此时x已经很小,直接模拟) for(long long i = 0; i < full_cycles && x > 0; i++) { one_cycle(x, ji, n, cntA); } // 处理剩余步数 for(int i = 0; i < remainder && x > 0; i++) { if(ji[i] == 'A') x--; else x /= 2; } return x; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while(t--) { int n, q; cin >> n >> q; string ji; cin >> ji; // 统计A的数量 int cntA = 0; for(char c : ji) cntA += (c == 'A'); vector<long long> num(q); for(int i = 0; i < q; i++) { cin >> num[i]; } for(int i = 0; i < q; i++) { long long x = num[i]; // 全A直接输出 if(cntA == n) { cout << x << '\n'; continue; } long long l = 0, r = 1e12; while(l < r) { long long mid = (l + r) / 2; if(calc(x, mid, ji, n) == 0) { r = mid; } else { l = mid + 1; } } cout << l << '\n'; } } return 0; }
http://www.jsqmd.com/news/675837/

相关文章:

  • Windows Cleaner:从C盘爆红到系统重生的智能管家
  • 为什么你的开关电源效率低?可能是没用对肖特基二极管(附型号推荐)
  • Ollama 完全指南:本地部署大模型的神器
  • 告别终端焦虑:Applite如何让Mac软件管理变得像点外卖一样简单
  • AI论文生成工具有哪些?精选12款写论文的AI排行榜,知网查重率控制王者! - 掌桥科研-AI论文写作
  • MyBatis-Plus 3.x 高效查询单条数据的两种封装思路(附避坑指南)
  • 2026年实测10款降AI工具:一键解决AI率过高,免费好用的降AI率网站汇总 - 降AI实验室
  • Python系列AI系列(仅供参考):AI大模型之采用DeepSeek-Coder:6.7b + Ollama + Continue离线部署
  • 8大网盘直链解析神器:如何轻松获取真实下载地址的完整指南
  • 瑞祥商联卡闲置不用?3个轻松变现技巧大揭秘! - 团团收购物卡回收
  • 2026年雅思高分App推荐:从听力到写作,全科覆盖 - 品牌2025
  • SeqGPT-560M从零开始教程:无需代码,Web界面完成零样本NLP任务
  • 2026年GEO监测工具大全|免费AI搜索优化直接用
  • 一键解锁Discord隐藏频道:ShowHiddenChannels插件让你的服务器管理更轻松
  • 深度解析开源虚拟显示驱动:如何用Parsec VDD实现专业级多屏扩展方案
  • WindowsCleaner:5步解决C盘空间不足的智能清理方案
  • 药用级泊洛沙姆 188 哪家价格便宜 高性价比采购指南 - 品牌推荐大师
  • AI论文生成工具有哪些?实测8款写论文的AI软件排行榜,应对各类论文需求! - 掌桥科研-AI论文写作
  • 微信小程序轮播图自定义指示器:从官方小圆点到创意进度条的完整实现方案
  • 避坑指南:ESP32-C3驱动ST7735屏,为什么你的屏幕不亮或花屏?
  • 硬件工程师的避坑指南:调试MIPI D-PHY信号完整性,从示波器眼图到状态机时序
  • 终极指南:如何免费解锁WeMod Pro高级功能
  • 3D 地球卫星轨道可视化平台开发 Day11(筛选指定卫星字段生成适配前端的JSON数据)
  • Real-Anime-Z企业应用:为动漫工作室搭建私有化风格化图像生成平台(含权限管理)
  • 群晖DSM 7.X保姆级教程:不用RAID,教你挂载NTFS硬盘做媒体库和冷备份
  • 别再踩坑了!Windows 10/11上SQL Server 2019 Developer版保姆级安装与SSMS配置全流程
  • 卢布尔雅那大学:纯视觉驱动实现图像异常自主检测能力提升突破
  • J1900软路由折腾记:从ESXi 6.7报错到OpenWrt网络配置,一篇讲透所有坑
  • Python系列AI系列(仅供参考):PyCharm智能开发实战:本地部署DeepSeek-R1与CodeGPT的高效融合指南
  • 中文文献元数据自动抓取:Jasminum插件彻底解决Zotero中文支持难题