Count Triangles CodeForces - 1355C

Like any unknown mathematician, Yuri has favourite numbers: AA , BB , CC , and DD , where A≤B≤C≤DA≤B≤C≤D . Yuri also likes triangles and once he thought: how many non-degenerate triangles with integer sides xx , yy , and zz exist, such that A≤x≤B≤y≤C≤z≤DA≤x≤B≤y≤C≤z≤D holds?

Yuri is preparing problems for a new contest now, so he is very busy. That's why he asked you to calculate the number of triangles with described property.

The triangle is called non-degenerate if and only if its vertices are not collinear.

Input

The first line contains four integers: AA , BB , CC and DD (1≤A≤B≤C≤D≤5⋅1051≤A≤B≤C≤D≤5⋅105 ) — Yuri's favourite numbers.

Output

Print the number of non-degenerate triangles with integer sides xx , yy , and zz such that the inequality A≤x≤B≤y≤C≤z≤DA≤x≤B≤y≤C≤z≤D holds.

Examples

Input

1 2 3 4

Output

4

Input

1 2 2 5

Output

3

Input

500000 500000 500000 500000

Output

1

Note

In the first example Yuri can make up triangles with sides (1,3,3)(1,3,3) , (2,2,3)(2,2,3) , (2,3,3)(2,3,3) and (2,3,4)(2,3,4) .

In the second example Yuri can make up triangles with sides (1,2,2)(1,2,2) , (2,2,2)(2,2,2) and (2,2,3)(2,2,3) .

In the third example Yuri can make up only one equilateral triangle with sides equal to 5⋅1055⋅105 .

题意:

就是给我们a,b,c,d四个数,a<=x<=b<=y<=c<=z<=d;求满足这个关系的x,y,z,并,且x,y,z可以构成三角形的组合有多少组。

思路:

满足的条件是x+y>z
枚举x+y的值,然后确定z的范围,确定x或y(x+y=i确定一个另一个也确定了)的范围,乘法原理,相乘即个数

因为x+y=i,可以根据x+y>z,确定z的范围(与[c,d]取交)

x取值为[a,b],x+y=i
y的取值是[i-b,i-a]与[b,c]取交

#include <iostream>
#include <stdio.h>
#include <algorithm>
#define ll long long
using namespace std;
int main()
{
    ll a,b,c,d;
    ll ans=0;
    cin>>a>>b>>c>>d;
    int k=a+b;
    if(k<=c)//(a+b>c)才可以成三角形
        k=c+1;
    for(ll i=k; i<=b+c; i++) //枚举x+y
    {
            ll lz=c,rz=min(i-1,d);        //z的范围
            ll ly=max(i-b,b),ry=min(i-a,c);  //y的范围(x定)   x+y=i;
            //ll lx=max(i-c,a),rx=min(i-b,b);  //x的范围
            ans+=(rz-lz+1)*(ry-ly+1);
            //也可以用x的范围算   ans+=(rz-lz+1)*(rx-lx+1);
    }
    cout<<ans<<endl;
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值