P12144 [蓝桥杯 2025 省 A] 地雷阵
题目描述
小蓝正在平面直角坐标系中的第一象限里玩一个逃生小游戏。在第一象限中埋有nnn颗地雷,第iii颗地雷的坐标为(xi,yi)(x_i, y_i)(xi,yi),触发范围为以(xi,yi)(x_i, y_i)(xi,yi)为圆心,半径为rir_iri的圆。一旦小蓝走进了圆内就会触发地雷导致游戏失败。小蓝初始在原点(0,0)(0, 0)(0,0)上,他需要在第一象限内选择一个方向一直往前走,如果能不触发任何地雷即可成功通关游戏。他想知道在[0,π2][0, \frac{\pi}{2}][0,2π]中均匀随机选择一个方向,即在0∘0^\circ0∘(朝向xxx轴正方向)至90∘90^\circ90∘(朝向yyy轴正方向)之间随机选择一个方向,通关游戏的概率是多少?
输入格式
输入的第一行包含一个正整数nnn。
接下来nnn行,每行包含三个正整数xi,yi,rix_i, y_i, r_ixi,yi,ri,相邻整数之间使用一个空格分隔。
输出格式
输出一行包含一个实数,四舍五入保留三位小数,表示答案。
输入输出样例 #1
输入 #1
1 2 2 1输出 #1
0.540输入输出样例 #2
输入 #2
2 1 3 1 3 1 1输出 #2
0.181说明/提示
评测用例规模与约定
- 对于20%20\%20%的评测用例,1≤n≤1001 \leq n \leq 1001≤n≤100;
- 对于所有评测用例,1≤n≤1051 \leq n \leq 10^51≤n≤105,1≤xi,yi≤1041 \leq x_i, y_i \leq 10^41≤xi,yi≤104,ri<min(xi,yi)r_i < \min(x_i, y_i)ri<min(xi,yi)。
::::info[备注]{open}
样例 #2 中出现了ri≥min(li,ri)r_i \ge \min(l_i,r_i)ri≥min(li,ri)的情况,违反了题目对ri<min(li,ri)r_i < \min(l_i,r_i)ri<min(li,ri)的限制(蓝桥杯原题面如此)。本题数据按照数据范围为准。
::::
C++实现
#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#defineall(v)v.begin(),v.end()constdoublePI=acos(-1);voidsol(){intn;cin>>n;vector<tuple<int,int,int>>p(n);for(inti=0;i<n;i++){intx,y,r;cin>>x>>y>>r;p[i]={x,y,r};}vector<pair<double,double>>rng;for(auto&[x,y,r]:p){doublet=atan2(y,x);doubled=sqrt(x*x+y*y);doubledet=asin(r/d);doubleL=t-det,R=t+det;rng.push_back({L,R});}sort(all(rng),[&](autoa,autob){returna.first<b.first;});doubleline=0;doubleres=0;for(auto&[L,R]:rng){line=max(line,L);res+=max(0.0,R-line);line=max(line,R);}doubleans=(PI/2-res)/(PI/2);cout<<fixed<<setprecision(3)<<ans<<endl;}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);sol();return0;}后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容