【CCF- CSP 202104-2 邻域均值 二维数组前缀和满分题解】

news/2025/1/12 8:45:29/

在这里插入图片描述

代码思路:

本题如果直接用暴力求解的话只能得70分。

运用到了二维数组的前缀和,难点是如何求出二维数组的前缀和并计算出领域所有元素的和。

注意计算平均数的时候要保证精度相同,所有都要化为double型,否则会出错。

首先,我们需要读入输入数据,包括矩阵的大小 n,邻域的半径 r,阈值 t,以及给定的矩阵。为了方便后面的计算,我们可以将矩阵的外圈补零。

接下来,我们需要用前缀和求出每个位置的前缀和,即该位置左上角的所有元素之和。这样在计算某个位置的邻域和时可以通过前缀和算法在 O(1) 的时间复杂度内完成。

接下来,我们需要遍历整个矩阵,计算每个位置在给定半径和阈值下的邻域平均值是否小于等于给定阈值 t,如果是,则累加答案。

最后输出答案即可。

代码实现:

#include<bits/stdc++.h>
using namespace std;int arr[700][700] = { 0 }; // 外圈补零int main()
{int n, L, r;double t; // 注意修改阈值数据类型为 doubledouble ave = 0; int Sum = 0;cin >> n >> L >> r >> t;for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){cin >> arr[i][j];}}for (int i = 1; i <= n; i++) // 求出前缀和{for (int j = 1; j <= n; j++){arr[i][j] += arr[i - 1][j] + arr[i][j - 1] - arr[i - 1][j - 1];//右下角+左下角+右上角-左上角,因为左上角的前缀和多加了一次}}// 求出某个位置的邻域和for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){int up = (i - r) > 0 ? i - r : 1;int down = (i + r) <= n ? i + r : n;int right = (j + r) <= n ? j + r : n;int left = (j - r) > 0 ? j - r : 1;double num = (double)(right - left + 1) * (double)(down - up + 1);//注意一定要化为double,否则结果会出错ave = (arr[down][right] - arr[down][left - 1] - arr[up - 1][right] + arr[up - 1][left - 1]) / num;if (ave <= t)Sum++;}}cout << Sum << endl; // 输出结果并换行return 0;
}
总结:
  1. 掌握二维数组的前缀和求法。
  2. 可以采用外圈补零来统一求前缀和的过程
  3. 不用另设一个前缀和数组,直接在原数组上操作
  4. 除法时一定要统一精度

http://www.ppmy.cn/news/87347.html

相关文章

iptables 讲解

文章目录 简介1. 什么是 iptables&#xff1f;2. iptables 的工作原理3. iptables 的基本概念链 (Chain)表 (Table)规则 (Rule) 4. iptables 的安装和配置5. 常见的 iptables 命令iptables 的基本语法添加规则删除规则查看规则 6. iptables 的规则匹配匹配条件匹配选项匹配动作…

LabVIEWCompactRIO 开发指南36 确定“Clock Ticks”或模拟时间

LabVIEWCompactRIO 开发指南36 确定“Clock Ticks”或模拟时间 桌面执行节点可以控制模拟时间&#xff0c;因此开发人员可以使用模拟I/O在开发计算机上执行期间更改关键点的激励。要成功使用此功能&#xff0c;需要测量FPGA VI完成所需的时间&#xff0c;或者需要以直观地知道…

h5stream默认密码是Vision@168

如果是r16及以上版本&#xff0c;HTTP默认端口为18085, HTTPS 默认端口为18445。 默认的用户名:admin 密码:12345&#xff0c;从14.15版本开始&#xff0c;默认密码为Vision168 官网文档地址 https://linkingvision.cn/download/documentation/h5stream/H5S%E8%A7%86%E9%A2%91…

基于pytest的接口测试框架详解,一定有你想知道的

目录 需求一&#xff1a;一套用例可以测试多套环境 需求二: 可以被jenkins调度执行 需求三 拥有测试报告 需求四&#xff1a;接口中某些字段值在每次请求中不重复 需求五&#xff1a; 可以多接口关联测试 需求六 构造的表数据可以和接口字段数据关联 需求七 pytest用例和…

弹性盒子,概念,常用属性

概念&#xff1a;弹性是一种布局方式&#xff0c;推荐使用在移动端&#xff0c;PC端不推荐。dispaly:block防止flex产生效果。 使用&#xff1a;display:flex; 弹性盒子常用的属性&#xff1a; display: flex; flex-wrap: wrap; //是否允许自动换行 flex-direction: column; //…

编程练习【寻找数组的中心下标】

给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。这一点…

Linux之时间日期类命令

时间日期类命令 date&#xff1a;日期命令 基本语法 date [OPTION]...[FORMAT]选项说明 选项功能-d <时间字符串>显示指定的“时间字符串”表示的时间&#xff0c;而非当前时间-s <日期时间>设置系统日期时间 参数说明 参数功能<日期时间格式>指定显示…