FZU2127_养鸡场

题目的意思为要你求出满足三边范围条件且周长为n的三角形的数目。

其实做法是直接枚举最短边,然后就可以知道第二条边的取值范围,同时根据给定的范围缩小范围。

同时根据第二条边的范围推出第三条边的范围,再次缩小范围。此时范围里面的数就是此时最短边对应的可行数。

 

#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;

ll n,m,k,x[4],y[4],ans;


ll Max(ll X,ll Y) { return X>Y?X:Y; }
ll Min(ll X,ll Y) { return X<Y?X:Y; }

int main()
{
    while (scanf("%I64d",&n)!=EOF)
    {
        for (ll i=1; i<4; i++) scanf("%I64d%I64d",&x[i],&y[i]);
        ans=0;
        for (ll i=Max(x[1],1); i<=n/3; i++)
        {
            ll tepx=Max(i,(n-2*i)/2+1),tepy=(n-i)/2;
            tepx=Max(x[2],tepx),tepy=Min(y[2],tepy);
            if (tepx>tepy) continue;
            //cout<<i<<" : "<<tepx<<' '<<tepy<<endl;
            tepx=n-i-tepx,tepy=n-i-tepy;
            tepy=Max(x[3],tepy),tepx=Min(y[3],tepx);
            if (tepy>tepx) continue;
            ans+=tepx-tepy+1;
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

 

posted @ 2013-11-20 17:11  092000  阅读(291)  评论(0编辑  收藏  举报