SP5464 CT - Counting triangles 题解

题目翻译

题意

有一个网格,左上角是 \((0,0)\),右上角是 \((x,y)\)。求这个网格中一共有多少个等腰直角三角形。

输入

第一行给定一个 \(c\),表示有 \(c\) 组数据。

后面 \(c\) 行,每行一个 \(x\) 和一个 \(y\)

输出

每次输出询问的结果。

思路

我们只需要每次枚举一个点,在算出以这个点作为等腰直角三角形的直角的所有符合要求的三角形就行了。

code

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,x,y,ans;
signed main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>x>>y;
		for(int i1=0;i1<=x;i1++){
			for(int j1=0;j1<=y;j1++){
				ans+=(min(i1-j1+y,x)-max(i1-j1,0LL)+1LL)*(min(i1+j1,y)-max(i1+j1-x,0LL)+1LL)-1LL;
                		//求三角形个数的公式。
                
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}
posted @ 2024-01-25 16:12  Arthur_Douglas  阅读(11)  评论(0编辑  收藏  举报