XTU 1097 SSB的烦恼 (线性规划)

来源:互联网 发布:stc单片机价格表 编辑:程序博客网 时间:2024/05/16 17:21

    根据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;}


  

  

原创粉丝点击