题目链接
https://vjudge.net/problem/Gym-101778G
题意
已知oa, ob, oc, od, Soad, Sobc, 求x, y
思路
用割线定理和三角形面积的公式,可以列出方程:
m
=
k
∗
l
m = k * l
m=k∗l
n = ( k + y ) ∗ ( l + x ) n = (k + y) * (l + x) n=(k+y)∗(l+x)
k ∗ ( k + y ) = l ∗ ( l + x ) k * (k + y) = l * (l + x) k∗(k+y)=l∗(l+x)
然后解出x和y即可。
注意精度,由于题目说误差不大于1e-6即可,因此可以直接输出double。
AC代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<string>
#include<sstream>
#include<cctype>
#include<map>
#include<stack>
#include<queue>
#include<list>
#include<cstdlib>
#include<ctime>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
int main()
{
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
int T;
scanf("%d", &T);
while(T--)
{
double k, l, m, n;
scanf("%lf%lf%lf%lf", &k, &l, &m, &n);
double x, y;
x = k * (sqrt(n / m)) - l;
y = l * (sqrt(n / m)) - k;
printf("%f %f\n", x, y);
}
return 0;
}