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

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


  

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值