codeforce Anton and Fairy Tale

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ACM__dongsheng/article/details/62427832

题意:有一个谷仓,它的容量为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;
}

猜你喜欢

转载自blog.csdn.net/ACM__dongsheng/article/details/62427832