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

news2024/11/25 2:27:34

在这里插入图片描述

代码思路:

本题如果直接用暴力求解的话只能得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; // 注意修改阈值数据类型为 double
    double 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.coloradmin.cn/o/571422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索商机,连接世界——第133届广交会买家信息帮你快速找到合适的客户

亲爱的商家和供应商们&#xff01;&#xff01; 您是否在寻找拓展市场和国际贸易的机会&#xff1f;你想找到合适的客户&#xff0c;推广你的产品和服务&#xff0c;取得更大的商业成功吗&#xff1f;那么&#xff0c;我们给你带来了一个难得的机会&#xff01; 随着第133届广…

【开源项目】Dynamic-Tp告警系统的源码解析

序言 【开源项目】Dynamic-Tp核心流程源码解读&#xff0c;继上回解读完DynamicTp这个开源项目的源码&#xff0c;觉得其中的告警机制也是十分精彩&#xff0c;如果能学会&#xff0c;用在自己的项目中&#xff0c;那才能说得上掌握了DynamicTp这个开源项目的源码理解的精髓。…

零碳光储 数能未来 | 全系光储产品实力吸睛,科士达精彩亮相SNEC 2023

5月24日&#xff0c;光伏行业最具影响力的全球性展会——“SNEC 2023”在上海盛大开幕。作为行业领先的全能方案供应商&#xff0c;科士达以“零碳光储 数能未来”为主题&#xff0c;携全系光储产品及解决方案重磅亮相。 展会现场&#xff0c;科士达展出的全系解决方案涵盖分布…

APACHE-ATLAS-2.1.0简介(三)

APACHE-ATLAS-2.1.0简介(一) APACHE-ATLAS-2.1.0简介(二) 写在前面 ATLAS为组织提供开放式的元数据管理和治理功能&#xff0c;用以构建其数据资产目录&#xff0c;对这些资产进行分类和管理&#xff0c;形成数据字典。 名词解释 元数据&#xff1a;就是用于描述数据的数据…

js实现PDF 预览和文件下载

在开发过程中要求对 PDF 类型的发票提供 预览 和 下载 功能&#xff0c;PDF 类型文件的来源又包括 H5 移动端 和 PC 端&#xff0c;而针对这两个不同端的处理会有些许不同&#xff0c;下文会有所提及。 针对 PDF 预览 的文章不在少数&#xff0c;但似乎都没有提及可能遇到的问…

【Java-Crawler】SpringBoot集成WebMagic实现爬虫出现的问题集(一)

SpringBoot集成WebMagic实现爬虫出现的问题集&#xff08;一&#xff09; 一、SpringBoot集成WebMagic框架日志异常问题及解决方案二、使用 Firefox 驱动&#xff08;geckodriver&#xff09;三、设置WebMagic中site中的User-Agent&#xff08;避免反爬虫&#xff09; 一、Spri…

【网络编程】demo版TCP网络服务器实现

文章目录 一、引入二、服务端实现2.1 创建套接字socket2.2 绑定bind2.3 设置监听状态listen2.4 获取新链接accept2.5 获取信息与返回信息&#xff08;文件操作&#xff09; 三、客户端实现3.1 创建套接字socket3.2 绑定问题3.3 发起链接connect3.4 客户端并行3.4.1 多进程版3.4…

公网远程访问本地Jupyter Notebook服务

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 转载自cpolar的文章&#xff1a;公网远程访问Jupyter Notebook【Cpolar内网穿透】 前言 Jupyter Notebook&am…

针对UDP协议的攻击与防御

一、UDP协议概述 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是TCP/IP协议栈中的一种无连接的传输协议&#xff0c;能够提供面向事务的简单不可靠数据传输服务。 1&#xff0e;UDP的报文格式 UDP的报文格式如图1所示。 图1 UDP报文格式 …

怎么在pdf文件上添加水印

怎么在pdf文件上添加水印&#xff1f;PDF添加水印是一种十分实用的方式&#xff0c;可以大大提高PDF文档的安全性和防护能力。在实际操作中&#xff0c;我们可以根据具体需求在PDF文件的各个页面上添加水印。这样即使你的PDF文件被他人恶意盗用&#xff0c;也可以快速、准确地找…

堤防安全自动化监测系统

项目背景 我国河系众多&#xff0c;海岸线漫长&#xff0c;在江边、海边修筑修筑着几万公里的提防设施保卫着沿江、沿海居民的生命安全&#xff0c;也保卫着经济发展的累累硕果。近年来&#xff0c;政府加大了堤防建设改造力度&#xff0c;提高了部分堤段的防洪能力。同时&…

统信UOS系统开发笔记(一):国产统信UOS系统搭建开发环境之虚拟机安装

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/130876940 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

vue 弹窗实现方法

Vue实现弹窗的方法有很多种&#xff0c;这里给出一个简单的示例&#xff1a; 1. 首先&#xff0c;在Vue项目中创建一个名为Modal.vue的组件文件&#xff1a; html <template> <div class"modal-mask" v-show"visible" click.self"close"…

基于遗传算法和非线性规划的函数寻优算法(matlab实现)

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1 理论基础 1.1 非线性规划 非线性规划是20世纪50年代形成的一门新兴学科。1951年库恩和塔克发表的关于最优性条件(后来称为库恩塔克条件)的论文是非线性规划诞生的标志。非线性规划研究…

报表控件FastReport使用指南-在Ubuntu LTS中创建PDF文档

FastReport 是功能齐全的报表控件&#xff0c;可以帮助开发者可以快速并高效地为.NET&#xff0c;VCL&#xff0c;COM&#xff0c;ActiveX应用程序添加报表支持&#xff0c;由于其独特的编程原则&#xff0c;现在已经成为了Delphi平台最优秀的报表控件&#xff0c;支持将编程开…

如何避免Salesforce Apex代码中5个常见错误,提升开发技巧?

编码是一门需要严谨和谨慎的技术&#xff0c;即使是有经验的开发人员也会犯错。一些最常见的编程错误&#xff0c;可能会导致严重的后果。因此&#xff0c;作为一名开发人员&#xff0c;了解并避免这些错误是非常重要的。 本篇文章将为学习者介绍在编写Apex代码时一定要规避的…

Java核心锁基准测试

测试模型 基于JMH基准测试库 测试代码 package com.lsy.study.benchmark;import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.options.Options; import…

《人工智能算法案例大全:基于Python》——实践AI算法,驭智创新之路

导语 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI算法成为推动智能化进程的核心要素。而在这个领域中&#xff0c;一本名为《人工智能算法案例大全&#xff1a;基于Python》的书籍引起了广泛关注。本文将深入探讨这本书所呈现的丰富案例&#xff0c;…

Linux——网络套接字2|Tcp服务器编写

本篇博客先看后面的代码,再回来看上面这些内容。 .hpp文件,基本调用 服务器基本框架

Ubuntu下Docker部署Gitlab CI

1. ubuntu gitlab安装步骤 1.1 更新系统软件包列表&#xff1a; sudo apt update1.2 安装必要的依赖项&#xff1a; sudo apt install curl openssh-server ca-certificates tzdata perl1.3 下载并安装 GitLab 包&#xff1a; curl -LO https://packages.gitlab.com/instal…