B. National Project-(二分)

总结

这个题有两种写法,一种二分,一种数学方法
自己的第一想法是推公式,没有二分的想法,后面看了别人的写法, 用二分确实也不错

问题

1:左边界是从n开始(因为每个单位都要铺沥青),右边界1e18毋庸置疑
2:求最小,大于等于ans的所有情况都满足
3:二分是lower_bound写法,自己每次写也不是特别熟悉,有点慢。

signed main()
{
    IOS;
    //file();
    int t;
    cin>>t;
    while(t--)
    {
        int n,g,b,ans;
        cin>>n>>g>>b;
        int l=n,r=1e18,num=n/2+n%2;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            int temp=mid/(g+b)*g+min(mid%(g+b),g);
            if(temp>=num)
                ans=mid,r=mid-1;
            else
                l=mid+1;
        }
        cout<<ans<<endl;
    }
    return 0;
}
发布了130 篇原创文章 · 获赞 5 · 访问量 4986

猜你喜欢

转载自blog.csdn.net/weixin_44224825/article/details/104301320