A. Bookshelf Filling of The 17th Heilongjiang Provincial Collegiate Programming Contest 二分+贪心
有个小小的问题..
就是为什么我们全队会都把这道题当成了模拟,然后在那边绞尽脑汁想可能漏掉的情况,现场没记错的话一共交了七发..
(至今没想起来我们是怎么wa掉辣么多发的!!而且实验室的队伍全过。了。。
正解:二分答案+贪心判断
二分的依据是答案显然满足单调性
贪心这个式子怎么来的?画张图!
最贪的情况就是下面的放满,上面的也放满
其中res是n%b后的值(左边多出来的空间)
x是我们二分的答案,同时也是下面的书的数目,R是m本书减去放在左边后剩下的
如果上面的空间放得下下面剩余的(R-x),就是((res+x)/b)*(h-b)>=R-x这个表达式成立~return true 即可
你说要是纠结一下,有没有其他的放置呐?有啊,但是这个是极限情况,这个满足了,其他的都能满足;反之,x不符合条件。
#include<bits/stdc++.h> using namespace std; long long n,m,res,x,h,b,a,R; bool check(long long x) { if(((res+x)/b)*(h-b)>=R-x) return true; else return false; } int main() { //("lys.in","r",stdin); int t; cin>>t; while(t--) { cin>>a>>b>>n>>m>>h; long long l=1,r=m,mid,ans; res=n%b; R=m-(n/b)*(h-a); while(l<=r) { mid=(l+r)/2; if(check(mid)) { ans=mid; r=mid-1; } else l=mid+1; } cout<<n+ans<<endl; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)