HDU 3903 Trigonometric Function (三角恆等式&餘弦定理)

http://acm.hdu.edu.cn/showproblem.php?pid=3903


如何判斷的有理性?


由這三個式子:

\cos(\theta\pm\psi)=\cos\theta\cos\psi\mp\sin\theta\sin\psi\,

\sin n\theta = \sum_{k=0}^n \binom{n}{k} \cos^k \theta\,\sin^{n-k} \theta\,\sin\left(\frac{1}{2}(n-k)\pi\right)

\cos n\theta = \sum_{k=0}^n \binom{n}{k} \cos^k \theta\,\sin^{n-k} \theta\,\cos\left(\frac{1}{2}(n-k)\pi\right)

問題可化歸爲判斷A,B,C的正弦和餘弦是否爲有理數,又由余弦定理

\angle A = \arccos \frac{{b^2  + c^2  - a^2 }}{{2bc}}\,\! \angle B = \arccos \frac{{c^2  + a^2  - b^2 }}{{2ca}}\,\!

\angle C = \arccos \frac{{a^2  + b^2  - c^2 }}{{2ab}}\,\!

以及

cos(arccos x)=x

\sin ( \arccos x)=\sqrt{1-x^2} \,

若x=p/q,則sqrt(1-x^2)=sqrt(q^2-p^2)/q

故只需判斷q^2-p^2是否爲完全平方數即可。


完整代碼:

/*281ms,356KB*/

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

int main()
{
	int icase;
	scanf("%d", &icase);
	__int64 a, b, c, n, m, k;
	while (icase--)
	{
		cin >> a >> b >> c >> n >> m >> k;
		__int64 d = 4 * b * b * c * c - (b * b + c * c - a * a) * (b * b + c * c - a * a);
		__int64 e = 4 * b * b * a * a - (a * a + b * b - c * c) * (a * a + b * b - c * c);
		__int64 f = 4 * a * a * c * c - (a * a + c * c - b * b) * (a * a + c * c - b * b);
		__int64 x, y, z;
		x = sqrt(d);
		y = sqrt(e);
		z = sqrt(f);
		if (x * x == d && y * y == e && z * z == f) puts("YES");
		else puts("NO");
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章