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 4Output
4Input
1 2 2 5Output
3Input
500000 500000 500000 500000Output
1Note
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; }
Count Triangles CodeForces - 1355C
最新推荐文章于 2021-01-25 13:56:16 发布