#CSP202509A. 蒙特卡洛

蒙特卡洛

时间限制: 1.0 秒

空间限制: 512 MB

题目描述

小 P 在学习了蒙特卡洛模拟后,设计了如下实验来估算 π\pi 的值。

  1. 准备阶段:对于给定参数 aa,小 P 在平面直角坐标系上首先画出一个边长为 2a2a 的正方形,左下角和右上角坐标分别为 (a,a)(-a,-a)(a,a)(a,a);然后再画一个以坐标原点 (0,0)(0,0) 为圆心、半径为 aa 的圆。
  2. 随机采样:小 P 在正方形内(含边界)随机生成 nn 个坐标点,并统计其中有多少个点位于圆形内(含边界)。
  3. 结果分析:随机生成的坐标点落在圆形内的概率等于圆形的面积除以正方形的面积,所以理论上有:
mnπa24a2\frac{m}{n} \approx \frac{\pi a^2}{4a^2}

这里我们用 mm 表示落在圆内的坐标个数,进而可以使用如下公式来估算 π\pi 的值:

π4mn\pi \approx 4\frac{m}{n}

小 P 已经生成好了 nn 个随机坐标点,但不清楚该如何统计落在圆内的数量,试编程帮助小 P 完成实验。

输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数 nnaa,分别表示坐标数量和边长参数。

接下来 nn 行,每行包含空格分隔的两个数,表示一个坐标。

输出格式

输出到标准输出。

输出一个实数,表示按上述方法估算的 π\pi 的值。

4 5
3 4
-5 5
0 0
3 4
3.0

样例 1 解释

只有坐标点 (5,5)(-5,5) 位于圆外。

5 5
3.01 3.99
-5 5
0 0
2.9 4.1
-3 -4
2.4

样例 2 解释

有三个坐标点位于圆内(含边界)。

子任务

50% 的测试点满足:所有输入的坐标均为整数;

全部的测试点满足:0<n,a10000 < n,a \leq 1000,所有坐标点均在正方形内(含边界)且输入的实数坐标最多包含两位小数。

评分方式

输出结果与标准答案相比绝对误差小于 0.00010.0001 即可,推荐保留六位小数输出结果。