C. Anton and Fairy Tale(数学推式子)

\(数学题,式子并不难推,但边界是真的烦\)

\(\color{Red}{Ⅰ.其实可以发现,当m>=n时,每次都可以粮食补到n,所以一定是在第n天消耗完毕}\)

\(\color{Purple}{Ⅱ.当n>m时,前m天每次粮食都补到n}\)

\(设从m+1天开始,需要mid天消耗完毕\)

\(因为每天都可以加m粮食,所以mid天可以加X_{补充}=(mid-1)*m粮食(因为第m+1天是补满前一天的,所以是mid-1)\)

\(然后麻雀带走的粮食用等差数列计算m+1,m+2,...,m+mid\)

\[也就是X_{消耗}=mid*(m+1)+(mid-1)*mid/2
\]

然后因为消耗的粮食要大于补充的粮食

\[得到X_{消耗}>=n+X_{补充}
\]

\[化简得到m+mid*(mid+1)/2>=n可行
\]

\(根据这个二分即可。\)

\(但是r的边界多少呢?我因为这个wa了无数次,边界应该是r=2e9\)

\(这样二分的时候刚好不会超过long long\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,ans;
int main()
{
    cin>>n>>m;
    if(n<=m)
    {
        cout<<n;
        return 0;
    }
    ans=m;//有m天补不全
    ll l=0,r=2e9,mid;
    while(r>l)
    {
        mid=(l+r)/2;
        if(m+mid*(mid+1)/2>=n)   r=mid;
        else    l=mid+1;    
    } 
    cout<<ans+r;
}

原文链接: https://www.cnblogs.com/iss-ue/p/12837354.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C. Anton and Fairy Tale(数学推式子)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/346665

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午4:01
下一篇 2023年3月2日 上午4:02

相关推荐