第十七届黑龙江省赛A.Bookshelf Filling
A
题意:n本A书高度为a,m本B书高度为b,b可以插入a与书柜的间隙中,求最终书摆放最小的宽度
思路:数学,二分
我们把要填充的图形分为两个个部分:
对于状态一的部分我们可以区分为填充满了和没填充满两个状态,没填充满状态可以直接输出n+1
填充满了则进行下一步填充
设m为要从右边拿书的个数,hp为书橱高-b书高,我们可以推出不等式
(ll)ceil((double)m/hp)+m<=len(进行了第一步状态下这堆书的宽度)
此时我们可以二分m范围即可求得答案
note,特判hp为0情况,以及右边的书无论如何都得留一本
#include<bits/stdc++.h> using namespace std; typedef long long ll; inline void solve() { ll a,b,n,m,h; cin>>a>>b>>n>>m>>h; ll len=n+m; if(b<=n){ ll c=n/b; if((b-a)*c>=m){ cout<<n+1<<endl;return; } else m-=(b-a)*c; } if(m==1) cout<<n+1<<endl; else{ ll len=m+n; ll hp=h-b; ll l=0,r=m-1; while(l<r){ int mid=(l+r+1)/2; if((ll)ceil((double)mid/hp)+mid<=len) l=mid; else r=mid-1; } cout<<len-l<<endl; } } int main() { ll t; cin>>t; while(t--){ solve(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义