专栏文章

题解:CF407A Triangle

CF407A题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miqsshd9
此快照首次捕获于
2025/12/04 10:09
3 个月前
此快照最后确认于
2025/12/04 10:09
3 个月前
查看原文

题目传送门

题意

有一个直角三角形的两条直角边长度分别为 aabb。你的任务是确定是否可以将该三角形定位在平面上,使其任意一条边均不平行于坐标轴,并且所有顶点的坐标为整数。如果存在这样的定位方式,输出对应顶点的坐标。

思路

这题数据很小,考虑一下暴力枚举。时间复杂度为 Θ(n3)\Theta(n^3),可以通过。我们假设一个点在原点上,然后枚举一条边长为 aa 的边且不与坐标轴平行,再得出另一条边。成功则输出 YES 和坐标,没有就直接输出 NO

code

CPP
#include<bits/stdc++.h>、、万能头
using namespace std;
int a,b,x,y,i,j,k,g;
int gcd(int x,int y)//不用内部函数,从我做起
{
	if(y==0)return x;
	return gcd(y,x%y);
}
int main()
{
	scanf("%d%d",&a,&b);//时间较少
	for(x=1;x<a;x++)
	{
		y=int(sqrt(a*a-x*x)+0.01);
		if(x*x+y*y==a*a)
		{
			g=gcd(x,y);
			x/=g;
			y/=g;
			k=int(sqrt(b*b/(y*y+x*x))+0.01);
			if(k*k*(x*x+y*y)==b*b)
			{
				if(g*x!=-k*y&&g*y!=k*x)
				{
					cout<<"YES"<<endl;
					cout<<"0 0"<<endl;
					cout<<g*x<<" "<<g*y<<endl;
					cout<<-k*y<<" "<<k*x<<endl;
					return 0; 
				}
			}
			x*=g;
		} 
	}
	cout<<"NO"<<endl;
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...