
无需二分,使用纯粹的数学就可以以
先将
设班长拿了
特别注意等差数列的末项是
对于以上的方程,直接使用一元二次方程求根公式求解即可。注意:两个解只须保留较大的,因为只需计算非负解。
和情况 2 大同小异。
对于以上的每个可行解,将解向下取整后打擂台求最大值即可。最后不要忘了,每个人先发了
x// Dusing 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