Skip to content

C - Count Triangles ​

题意:
给定A,B,C,D,求 1<=A<=x<=B<=y<=C<=z<=D1<=A<=x<=B<=y<=C<=z<=D,满足x,y,z构成的三角形
思路:
枚举x+y的值设为i,则z的取值范围为 [C,min(D,i−1)][C,min(D,i-1)]
因为 y=i−x且y∈[B,C]且x∈[A,B],y=i-x且y∈[B,C]且x∈[A,B],
所以x∈[max(i−C,A),min(C,i−B)]所以x∈[max(i-C,A),min(C,i-B)]
每次将两个区间相乘再累加即可

cpp
void solve(){
	ll a,b,c,d,ans=0;
	cin>>a>>b>>c>>d;
	for(ll i=max(c+1,a+b);i<=b+c;i++){
		ans+=(min(d,i-1)-c+1)*(min(b,i-b)-max(i-c,a)+1);
	}
	cout<<ans<<"\n";
}