题解:SP5464 CT - Counting triangles

一道数学题。

直接枚举每个点能组成的等腰直角三角形。

公式:(min(ij+y,x)max(ij1,1))×(min(i+j,y)max(i+jx1,1))1(\min(i−j+y,x)−\max(i−j−1,−1))×(\min(i+j,y)−\max(i+j−x−1,−1))−1

最后:

不开 long long 见祖宗

代码就很简单了:

#include<bits/stdc++.h>
using namespace std;
long long t, x, y, ans;
int main(){
	cin >> t;
	while(t --){
		cin >> x >> y;
		ans = 0;//一定要清零,我就是这样喜提WA的
		for(long long i = 0; i <= x; i ++)
			for(long long j = 0; j <= y; j ++)
			ans += (min(i - j + y, x) - max(i - j, (long long)0) + (long long)1) * (min(i + j, y) - max(i + j - x, (long long)0) + (long long)1) - (long long)1;//公式,记得加longlong,不然会报错
		printf("%lld\n", ans);
	}
	return 0;
}
``

posted on 2024-04-10 18:46  zhangzirui66  阅读(4)  评论(0编辑  收藏  举报  来源

导航