题目大意:谷仓最大容量为n粒谷子,每天加m粒,麻雀每天从谷仓拿和天数相同的米,问第几天谷仓为空。
思路:分两种情况:第一种当n<=m时,前n-1天谷仓为满,第n天米仓为空。第二种情况,前m天谷仓始终满,从m+1天开始,鸟吃的数量为m+1,m+2,m+3........
鸟每天吃的成等差数列,所以公式为n*(n+1)/2;
暴力会在第6,7个上超时,所以找还要用二分查找。
附上AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
ll mid;
int main()
{
scanf("%lld%lld",&n,&m);
if(n<=m)
cout<<n<<endl;
else
{
ll l=1,r=INT_MAX;
while(l<r)
{
mid=(l+r)/2;
if(mid*(mid+1)/2>=n-m)//第n天还没补粮食粮仓就空了
r=mid;
else
l=mid+1;
}
cout<<l+m<<endl;//最初的m天粮仓始终满,所以加上
}
return 0;
}