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; } }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号