AI智能
改变未来

C. Anton and Fairy Tale(codeforces)

C. Anton and Fairy Tale

问题:一个粮仓,早上存粮,晚上被麻雀偷吃。第一天存入n,n是粮仓的容量,之后每天存入m,如果某天存入的量和剩余的量大于n,那么只能留下n。第一天有一只麻雀偷吃,第二天又两只麻雀偷吃,以此类推。问:到第几天粮仓第一次为空。

若n <= m;
每天都会把粮仓填满(n),直到第n天,粮仓里的粮食会被n只麻雀第一次吃空。
若n > m;
直到第m天,粮仓一直是满的–(n),但从m+1天开始,粮仓的粮食每天都会减1,因为你n和m都可能会很大,所以直接爆搜一定会Tle,我们就可以用二分搜索(我们可以统计从m+1天开始,每天减少的总量【等差数列求和】,直到某天总量大于n,到这天粮仓一定就空了)。

#include<bits/stdc++.h>using namespace std;typedef long long ll;int main() {ll n, x, ans;scanf(\"%lld%lld\", &n, &x);if(n <= x) {printf(\"%lld\", n);return 0;}ll l = 1, r = INT_MAX, mid;//二分while(l < r) {mid = (l + r)/2;if((mid+1)*mid/2 >= (n-x)) r = mid;else l = mid+1;}printf(\"%lld\", l+x);return 0;}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C. Anton and Fairy Tale(codeforces)