无需二分,使用纯粹的数学就可以以
先将
设班长拿了
特别注意等差数列的末项是
对于以上的方程,直接使用一元二次方程求根公式求解即可。注意:两个解只须保留较大的,因为只需计算非负解。
和情况 2 大同小异。
对于以上的每个可行解,将解向下取整后打擂台求最大值即可。最后不要忘了,每个人先发了
x// D
using namespace std;
double solvex(int a, int b, int c)
{
int x1=(-b+sqrt(b*b-4*a*c))*1.0/2*a;
int x2=(-b-sqrt(b*b-4*a*c))*1.0/2*a;
return max(x1, x2);
}
signed main()
{
int n, m, k; cin>>n>>m>>k;
m-=n;
int s=0;
int l=k-1;
int r=n-l-1;
int Max=0;
// case 1: x>l && x>r
double x=(int)(2*m+l*l+r*r+l+r)*1.0/(2*l+2*r+2);
if(x>l && x>r)
Max=max(Max, (int)x);
// case 2: x<=l && x>r
x=(int)solvex(1, 1+2*r, -(2*m+r+r*r));
if(x>0 && x<=l && x>r)
Max=max(Max, (int)x);
// case 3: x>l && x<=r
x=(int)solvex(1, 1+2*l, -(2*m+l+l*l));
if(x>0 && x>l && x<=r)
Max=max(Max, (int)x);
// case 4: x<=l && x<=r
x=(int)sqrt(m);
if(x<=l && x<=r)
Max=max(Max, (int)x);
cout<<(int)(Max+1)<<endl;
return 0;
}
All Rights Reserved 2022 Wang Zhanrui