Post

数三角形(思维+三数范围)

C - Count Triangles

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

1
2
3
4
5
6
7
8
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";
}
This post is licensed under CC BY 4.0 by the author.