题目链接:https://www.luogu.com.cn/problem/P6483
昨天刚用小号交题解的我又来用大号交题解了。
这一次,我用了一个与众不同是做法,首先,由我小号的题解,可得 n=r/2+2−m,b=(m−2)(n−2),,然后,可得 (m−2)(r/2−m)=b,化成一元二次方程的一般形式,就变成了 m2−m(r/2+2)+(r+b)=0,解得 m=22r+2±(2r−2)2−4b,由于两个根一定是正整数,所以取 m=22r+2=(2r−2)2−4b 即可。
#include<bits/stdc++.h>
using namespace std;
int r,b,k,m;int main(){
scanf("%d%d",&r,&b),k=r/2;
m=(k+2-sqrt((k-2)*(k-2)-4*b))/2;
printf("%d %d",k+2-m,m);return 0;
}