题意:有一个谷仓,它的容量为N。第i天先会增加M(不会超出它的容量),然后减少i, 问第几天后谷仓为空,且第一天谷仓是满的。
第i天 增加 减少
1 0 1
2 1 2
3 2 3
…… …… ……
发现 在前m 天 内 有这种情况:下一天增加的 刚好弥补 前一天减少的。
设 第 x+m天为空
m m-1 m+1
m+1 m m+2
m+x m+x-1 m+x+1
所以有方程:1 + 2 +3 +……+ x-1 + (x+m ) >= N;
#include <bits\stdc++.h>
using namespace std;
int main(){
long long n,m,x;
scanf("%lld%lld",&n,&m);
if(n==1){
printf("1\n");
return 0;
}
else if(n<=m){
printf("%lld\n",n);
return 0;
}
else{
long long RT =(long long)sqrt((double)(1+8*(n-m)));
x = (RT-1)/2;
if(x*x+x < 2*(n-m)) x+=1;
}
printf("%lld\n",x+m);
return 0;
}