题解:P10519 [XJTUPC2024] 转呀转
洛谷P10519
题目大意
求一点
思路
考虑到初始点、结束点、圆心形成一个三角形,并且有两边长为
AC代码
#include <bits/stdc++.h>
using namespace std;
const double pi = 3.14159265358979323846;
double mod1(double x) { //取小数部分
return x - (int)(x);
}
signed main() {
double x, y, t, v;
cin >> x >> y >> t >> v;
double circles = mod1(t * v), pers = 360.0 * circles;
if (pers > 180)
pers = 360 - pers; //避免炸掉,先转换成小于等于 180 度的角
double rad = pers * (pi / 180.0);
double r = sqrt(x * x + y * y); //求与 (0, 0) 的直线距离(经过简化,和公式有所出入)
double ans = r * r + r * r - 2 * r * r * cos(rad); //核心公式,两边距离 a 和 b 都是半径,所以全部用 r 指代
cout << fixed << setprecision(10) << sqrt(ans);
return 0;
}
总结
这道题代码难度不大,但对数学方面有一定的要求,比如弧度的转换公式和余弦定理,建议有一定数学功底再完成本题。