方伯伯浇水 2 - 计算玉米品质平均值/n/n题目描述/n/n方伯伯有一块玉米田,玉米田可以视为平面直角坐标系上横纵坐标在 $-10^5$ 至 $10^5$ 范围内(包括边界)的一片正方形区域。玉米田内的每个整点(横纵坐标均为整数的点)上都种着一株玉米。/n/n方伯伯连续 $m$ 天对玉米田进行浇水,每天他会选出一个圆心坐标为 $(x,y)$,半径为 $r$ 的圆形区域,对其中(不包括边界)的每株玉米浇一次水(如果圆形区域超过玉米田边界,超过部分无需浇水)。最开始所有玉米的品质都是 $1$,每次浇水会让该株玉米的品质增 $1$。/n/n$m$ 天过后,到了收获的季节,方伯伯想采用抽样检测的方式来调查玉米田的品质。方伯伯给出了 $10$ 株玉米的坐标,他想调查这 $10$ 株玉米品质的平均数。/n/n输入格式/n/n第一行输入一个正整数 $m$($m/le10^5$),代表浇水天数。/n接下来 $m$ 行,每行输入三个整数 $x_i,y_i$($-10^5/le x_i,y_i/le 10^5$)和 $r_i$($0<r_i/le10^5$),代表第 $i$ 天浇水的圆形区域。/n/n接下来 $10$ 行,每行输入两个整数 $x_i,y_i$($-10^5/le x_i,y_i/le 10^5$),代表收获季节调查的 $10$ 株玉米的坐标。/n/n输出格式/n/n输出一个数字(保留 $2$ 位小数),代表调查的这 $10$ 株玉米品质的平均数。/n/n样例 #1/n/n样例输入 #1/n/n/n2/n3 4 5/n-1 0 1/n-1 0/n0 0/n1 0/n2 0/n3 0/n-1 -1/n0 -1/n1 -1/n2 -1/n3 -1/n/n/n样例输出 #1/n/n/n1.40/n/n/n提示/n/n判断点 $(x_1,y_1)$ 与圆 $(x_0,y_0,r_0)$ 的方法是:/n/n计算点 $(x_1,y_1)$ 到圆心 $(x_0,y_0)$ 的距离的平方 $d^2=(x_1-x_0)^2+(y_1-y_0)^2$,将这个值与圆的半径的平方 $r_0^2$ 作比较:/n- 如果 $d^2<r_0^2$,说明点在圆内;/n- 如果 $d^2=r_0^2$,说明点在圆上;/n- 如果 $d^2>r_0^2$,说明点在圆外。/n/nC++ 代码/n/nc++/n#include <iostream>/n#include <cmath>/nusing namespace std;/n/nint main() {/n int m;/n cin >> m;/n int x, y, r;/n int quality[100001] = {1}; // 初始化所有玉米品质为 1/n for (int i = 0; i < m; i++) {/n cin >> x >> y >> r;/n for (int j = -100000; j <= 100000; j++) {/n for (int k = -100000; k <= 100000; k++) {/n if (pow(j - x, 2) + pow(k - y, 2) < pow(r, 2)) {/n quality[(j + 100000) * 200001 + (k + 100000)] += 1; // 坐标映射到一维数组/n }/n }/n }/n }/n int x1, y1;/n double sum = 0;/n for (int i = 0; i < 10; i++) {/n cin >> x1 >> y1;/n sum += quality[(x1 + 100000) * 200001 + (y1 + 100000)]; // 坐标映射到一维数组/n }/n printf('%.2lf', sum / 10);/n return 0;/n}/n/n/n代码解析/n/n1. 使用一维数组 quality 来存储每个玉米的品质,使用坐标映射的方式将二维坐标映射到一维数组。/n2. 遍历每个浇水区域,判断每个玉米是否在该区域内,如果在则将该玉米的品质加 1。/n3. 遍历 10 个调查玉米,计算它们品质的总和。/n4. 计算平均品质并输出。/n/n注意:/n/n- 此代码使用了一维数组来存储玉米品质,因为直接使用二维数组会超出内存限制。/n- 坐标映射的方式使用了公式 (x + 100000) * 200001 + (y + 100000),将所有坐标映射到正整数范围内,避免负数出现。/n- 代码中使用了 pow() 函数计算平方,可以使用更快的平方计算方法提高效率。/n/n其他优化思路/n/n- 可以使用空间换时间的方法,使用哈希表记录每个玉米的品质,避免重复计算。/n- 可以使用二分查找或其他更优的算法来判断点是否在圆内。/n/n希望以上代码和解析能够帮助您理解题目和完成代码编写!

玉米田浇水 - 计算玉米品质平均值 | C++ 代码

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

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