方伯伯浇水 2问题描述方伯伯有一块玉米田,可以看作是平面直角坐标系上横纵坐标在 $-10^5$ 至 $10^5$ 范围内(包括边界)的一片正方形区域。玉米田内的每个整点(横纵坐标均为整数的点)上都种着一株玉米。方伯伯连续 $m$ 天对玉米田进行浇水,每天他会选择一个圆心坐标为 $(x,y)$,半径为 $r$ 的圆形区域,对其中(不包括边界)的每株玉米浇一次水(如果圆形区域超过玉米田边界,超过部分无需浇水)。最开始所有玉米的品质都是 $1$,每次浇水会让该株玉米的品质增 $1$。$m$ 天过后,到了收获的季节,方伯伯想采用抽样检测的方式来调查玉米田的品质。方伯伯给出了 $10$ 株玉米的坐标,他想调查这 $10$ 株玉米品质的平均数。输入格式第一行输入一个正整数 $m$($m/le10^5$),代表浇水天数。接下来 $m$ 行,每行输入三个整数 $x_i,y_i$($-10^5/le x_i,y_i/le 10^5$)和 $r_i$($0<r_i/le10^5$),代表第 $i$ 天浇水的圆形区域。接下来 $10$ 行,每行输入两个整数 $x_i,y_i$($-10^5/le x_i,y_i/le 10^5$),代表收获季节调查的 $10$ 株玉米的坐标。输出格式输出一个数字(保留 $2$ 位小数),代表调查的这 $10$ 株玉米品质的平均数。样例 #1### 样例输入 #123 4 5-1 0 1-1 00 01 02 03 0-1 -10 -11 -12 -13 -1### 样例输出 #11.40提示判断点 $(x_1,y_1)$ 与圆 $(x_0,y_0,r_0)$ 的方法是:计算点 $(x_1,y_1)$ 到圆心 $(x_0,y_0)$ 的距离的平方 $d^2=(x_1-x_0)^2+(y_1-y_0)^2$,将这个值与圆的半径的平方 $r_0^2$ 作比较:- 如果 $d^2<r_0^2$,说明点在圆内;- 如果 $d^2=r_0^2$,说明点在圆上;- 如果 $d^2>r_0^2$,说明点在圆外。C++ 代码cpp#include #include #include #include #include using namespace std;const int N = 100010;int m;struct node { int x, y, r;}a[N];int b[N], c[N];double ans = 0;double dis(int x1, int y1, int x2, int y2) { return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));}int main() { scanf('%d', &m); for (int i = 1; i <= m; i++) { scanf('%d%d%d', &a[i].x, &a[i].y, &a[i].r); } for (int i = 1; i <= 10; i++) { scanf('%d%d', &b[i], &c[i]); } for (int i = 1; i <= 10; i++) { int cnt = 0; for (int j = 1; j <= m; j++) { if (dis(a[j].x, a[j].y, b[i], c[i]) < a[j].r) { cnt++; } } ans += cnt; } printf('%.2lf/n', ans / 10); return 0;

玉米田浇水 - 计算玉米品质平均值

原文地址: https://www.cveoy.top/t/topic/jCWf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录