C. Anton and Fairy Tale

链接

[https://codeforces.com/contest/785/problem/C]

题意

初始时有n,第1天先加m开始吃1,但总的不能超过n,第i天先加m开始吃i(如果不够或刚好就吃完,结束了),
问能吃多少天

分析

这个样例,模拟该过程发现规律
如果n<=m,就是n天
否则发现第m+1天比m天剩余的少1,第m+2天比m+1天剩余少2.。。。
就直接二分搞了

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	//freopen("in.txt","r",stdin);
   ll n,m;
   while(cin>>n>>m){
   	if(n<=m){
   		cout<<n<<endl; continue;
	   }
	   else{
	   	n-=m;
	   	ll l=0,r=2e9;
	   	while(l<r){
	   		ll mid=(l+r)/2;
	   		if((mid+1)*mid/2>=n)
	   		r=mid;
	   		else l=mid+1;
		   }
		   cout<<m+l<<endl;
	   }
   }
	return 0;
}
posted @ 2019-03-04 15:52  ChunhaoMo  阅读(167)  评论(0)    收藏  举报