fzu Problem 2127 养鸡场

Accept: 67    Submit: 287

Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

Jason买来了n米长的竹篱笆,打算将n米长的竹篱笆全部用来围成一个三角形的养鸡场。为方便起见,养鸡场三条边的长度都为正整数。同时,他想让自己的养鸡场看起来更美观一些,要求三条边的长度分别在一个区间范围内。

现在,他想知道有多少种不同的方案使得围成的养鸡场满足要求?

 Input

输入包含多组数据。输入数据第一行是一个正整数n,表示竹篱笆的长度。

在接下来三行中,第i行的两个正整数为xi,yi。表示三角形的第i条边的边长ai的范围在[xi,yi]内。

注意:Jason规定a1≤a2≤a3。

 Output

输出一个整数,表示满足要求的不同方案数。

约定:

对于第二行至第四行,都有1≤xi≤yi ≤n

对于50%的数据n≤5000

对于100%的数据n≤200000

 Sample Input

12

3 5

3 5

3 5

 Sample Output

2

 Source

福州大学第十届程序设计竞赛


#include<stdio.h>
int max(int a,int b)
{
    return a>b?a:b;
}
int min(int a,int b)
{
    return a<b?a:b;
}
int main()
{
    int n,x[4],y[4],i,a1,a2,a3,b1,b2,b3;
    long long  sum;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=3;i++)
			scanf("%d%d",&x[i],&y[i]);
		sum=0;
        for(i=x[1];i<=y[1];i++)
        {
            if(n<3*i)   break;
            if(i>y[2])  break;
			a2=max(i,(n-i*2)/2+1);//a2>(n-i*2)/2时,满足两边这和大于第三边,可以组成三角形。
			a2=max(x[2],a2);
			a3=min((n-i)/2,y[2]);//(n-i)-a3>=a3;a3<=(n-i)/2;
            if(a3<a2)   continue;
            b2=n-a2-i; b3=n-a3-i;
            a1=max(b3,x[3]),b1=min(b2,y[3]);
            if(a1>b1)
				continue;
            else
				sum+=b1-a1+1;
        }
        printf("%I64d\n",sum);
    }
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值