专栏文章

题解:P4914 難題「龍の頸の玉 -五色の弾丸-」

P4914题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@mip6amp9
此快照首次捕获于
2025/12/03 06:52
3 个月前
此快照最后确认于
2025/12/03 06:52
3 个月前
查看原文

P4914 難題「龍の頸の玉 -五色の弾丸-」

更好的阅读体验:本人的博客园
前置芝士:三角、反三角函数,正弦、余弦定理。

解法说明

根据题意,aaaa 发射的子弹有一个是背对辉夜的方向,其他龙玉发射方向与 aaaa 相同,可以发现无论五边形如何绕辉夜转,方向相对辉夜来说都是相同的,所以不需要 vvtt
五枚龙玉其中有两对龙玉是对称的,所以只需分讨三种情况。
  1. aaaa
    因为有一发子弹背对辉夜,所以如果 kk 是奇数,辉夜安全,反之危险。
  2. 次外圈
    如下图,该三角形两边已确定。因为正五边形,故 rrRR 夹角为 2π5\frac{2\pi}{5}。通过余弦定理解出辉夜与龙玉的距离,再用正弦定理解出角 θ\theta,通过 kk 算出两发子弹间隔,检验间隔是否整除角 θ\theta 即可。
最外圈的解法与次外圈同理,只需把 2π5\frac{2\pi}{5} 改为 4π5\frac{4\pi}{5}
单次询问时间复杂度为 O(1)O(1)

代码

CPP
#include<bits/stdc++.h>
using namespace std;
#define ld long double
#define int long long
const ld pi=acos(-1.0);
const ld inf=1e-10;
ld r,R,v,t;
int T,k;

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    cin>>T;
    while(T--){
        cin>>r>>R>>v>>t>>k;

        if((k&1)==0){cout<<"no\n";continue;}
        ld xi=r*r+R*R-2*r*R*cos(pi*0.4);
        ld ang=pi-asin(sin(pi*0.4)/xi*r);
        ld ans=ang/(2*pi/k);
        if(ceil(ans)-ans<inf){cout<<"no\n";continue;}

        xi=r*r+R*R-2*r*R*cos(pi*0.8);
        ang=pi-asin(sin(pi*0.8)/xi*r);
        ans=ang/(2*pi/k);
        if(ceil(ans)-ans<inf){cout<<"no\n";continue;}

        cout<<"yes\n";
    }
    return 0;
}

评论

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

正在加载评论...