zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    curl post请求
    c++/c字符串操作汇集
    CCClippingNode bug
    处理Google Play的相关方法
    libcurl断点下载
    c pvr转存pvr.ccz格式
    ios 设备震动
    cocos2d-x android项目引用so库编译
    cocos2d-x CCEditBox 字符不能显示完全的bug
    Android增量更新
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12837354.html
Copyright © 2011-2022 走看看