根据x‘^2+y’^2-x‘-y’-2*x‘*y’=0 可得:(x‘-y’)^2-(x‘+y’)=0; ……③
设x=(x'-y') y=(x'+y') ,则可知:2<=(x+y) <=2a……① 2<=(x-y)<=2b……② 又有x^2=y,①可化为:2<=(x+1/2)^2-1/4<=2a 进而可得:x>=1 && xi<= (sqrt(8*a+1)-1)/2 即xb‘=xi(max), yb'=xb'*xb' ; 由②可得:y>=1 && yi<=(sqrt(8*a+1)+1)/2 比较yb'与yi的大小……
而③又可写为(y'-x')^2-(x'+y')=0,所以x'与y' 可交换 所以将a与b交换在算一遍,两和相加得最后结果
线性规划的图:(多年未用过了,嘿嘿)
代码:
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int xian(int a,int b)
{
int xa;
double xb,yb;
int x1,x2;
xa=2;
xb=(sqrt( 8*a+1.0 ) -1) /2;
yb=xb*xb;
if( 2*b+xb <yb )
{
xb=(sqrt(8*b+1.0)+1)/2;
}
x1=xa;
x2=(int)floor(xb);
return x2-x1+1;
}
int main()
{
int a,b;
int n;
int sum1,sum2;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&b);
sum1=xian(a,b);
sum2=xian(b,a);
printf("%d\n",sum1+sum2);
}
return 0;
}