题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5605
问题描述
在平面直角坐标系上有一个点PP, 他的坐标是(x, y)(x,y). 有一条直线y = kx + by=kx+b经过了PP, 且分别交x, yx,y正半轴于A, BA,B. 求|PA| * |PB|∣PA∣∗∣PB∣的最小值.
输入描述
第一行一个TT,表示数据组数.
接下来TT行每行两个正整数x,yx,y, 表示PP的坐标.
T=500, 0 < X, Y \leq 10000T=500,0<X,Y≤10000
输出描述
TT行,每行一个数字,表示每组数据的答案
输入样例
1
2 1
输出样例
4
Hint
样例中P(2,1)P(2,1), 取直线y = -x + 3y=−x+3, 他经过了PP并分别交x, yx,y正半轴于A(3,0), B(0,3) A(3,0),B(0,3),∣PB∣=2√2,∣PA∣∣PB∣=4,经验证确实是最小值.
唉 这个题当时比赛的时候没有想出来,丢脸啊,也让我知道数学的重要性。没数学不行啊。
不说了,题解:
设y=kx-b与x坐标轴的的夹角是α,那么我们就可以分别表示|PA|和|PB|
|PA| = y /sinα;
|PB| = x / conα;
所以|PA|*|PB| = x*y / sinα*conα = 2*x*y/sin2α;
因为sin2α<= 1,所以|PA|*|PB|的最小值是2*x*y;
就是这样我都没做出来唉;
附一份代码:
#include <stdio.h>
int main()
{
int T;
int x, y;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &x, &y);
printf("%d\n", 2*x*y);
}
return 0;
}