CCF CSP认证 历年题目自练Day27

news2024/11/16 23:56:58

题目一

试题编号: 202104-1
试题名称: 灰度直方图
时间限制: 1.0s
内存限制: 512.0MB
请添加图片描述
样例输入
7 11 8
0 7 0 0 0 7 0 0 7 7 0
7 0 7 0 7 0 7 0 7 0 7
7 0 0 0 7 0 0 0 7 0 7
7 0 0 0 0 7 0 0 7 7 0
7 0 0 0 0 0 7 0 7 0 0
7 0 7 0 7 0 7 0 7 0 0
0 7 0 0 0 7 0 0 7 0 0
Data
样例输出
48 0 0 0 0 0 0 29
Data
评测要求:
请添加图片描述

题目分析(个人理解)

  1. 还是先看输入,第一行输入n表示类矩阵的行数,m表示列数,第三个参数l表示每个元素都小于l。
  2. 很简单,直接用列表推导式生成二维列表,依次写入元素值即可,然后再将二维列表一维化,要求输出的是0到(l-1)的元素值出现的次数,那就遍历l,统计在一维列表中出现的次数,然后将次数追加写入到新列表,最后输出新列表即可。
  3. 上代码!!!
n, m, l = map(int, input().split())
num = [[i for i in map(int, input().split())] for j in range(n)]
nums = [i for j in num for i in j]
#nums = sum(num, [])
#上面两种方法都是将二维数组num化为一维数组nums,选一种即可
h = []
for i in range(l):
    h.append(nums.count(i))
    #统计i在一维数组中出现的次数,并记录到h中
print(*h)

题目二

试题编号: 202104-2
试题名称: 邻域均值
时间限制: 1.0s
内存限制: 512.0MB
请添加图片描述
请添加图片描述
样例输入
4 16 1 6
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Data
样例输出
7
Data
样例输入
11 8 2 2
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 7 0 0 0 7 0 0 7 7 0
7 0 7 0 7 0 7 0 7 0 7
7 0 0 0 7 0 0 0 7 0 7
7 0 0 0 0 7 0 0 7 7 0
7 0 0 0 0 0 7 0 7 0 0
7 0 7 0 7 0 7 0 7 0 0
0 7 0 0 0 7 0 0 7 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
Data
样例输出
83
请添加图片描述

题目分析(个人理解)

  1. 首先,这个题目就很能吓唬人,大概思路是这样的,第一行输入n表示有一个n行n列的矩阵(图像),之后的n行输入元素。第二个参数l代表矩阵中的元素小于l,第三个参数是r,用来表示范围,再仔细看题,我们需要判断矩阵中每个元素(像素)在r范围内的平均数是否小于等于t(阈值)也就是第四个参数,如果小于等于那就count +1(count作为计数器),最后输出count就知道较暗区域有几个像素了
  2. 那么问题来了,r是变的,可以是1,2,3…那么对应要求和的数目也在变化,如果是最左上角的元素,当r=1时,总共有四个数相加求和之后再求平均值,如果是第一行第二列就要计算6个数的数值,在中间的位置就要计算9个数的值,很不方便判断,我对类矩阵依旧选择二维列表来实现。那么为了统一针对不同位置的元素可以使用相同的算法我选择对原矩阵扩充r行2r列,使其每一个元素都满足在r=1时计算9个元素求和再求平均数的问题
  3. 如图:就以第一个输入例子为例:(填充之后)
    在这里插入图片描述
    那么用列表生成机器迭代生成即可
mat = [[0] * (n + 2 * r) for _ in range(n + 2 * r)]
for i in range(r, n + r):
    mat[i] = [0] * r + list(map(int, input().split())) + [0] * r
count = 0
  1. 最关键的点到了,现在都满足遍历原矩阵的时候求和求平均值都是最大的情况((2r+1)**2个),那就很好办来了,接下来给大家介绍二维矩阵前缀和,用来解决任意一个子矩阵内的元素和。
  2. 如图:红色区域相当于要求和的所有元素所在的位置。
    请添加图片描述
    我要求红色部分面积如何求?
# sum[x1][y1] 被减掉两次
area_red=sum[x4][y4]-sum[x3][y3]-sum[x2][y2]+sum[x1][y1]

二维前缀和矩阵的生成:

# mat[xc][yc]表示原始矩阵
sum[x_c][y_c]=sum[x_a][y_a]+sum[x_b][y_b]+mat[x_c][y_c]
<==>
sum[x][y]=sum[x-1][y]+sum[x][y-1]+mat[x][y]

  1. 那么这道题如何求红色部分?
for i in range(r, n + r):
    for j in range(r, n + r):
        sum_mat[i][j] = mat[i][j] + sum_mat[i][j - 1] + sum_mat[i - 1][j] - sum_mat[i - 1][j - 1]

  1. 之后只需遍历每一个元素判断是否在红色区域如果是那就加起来求平均值在去和t比大小,若是小于等于就count+1,然后输出count就结束啦!!!
  2. 上完整代码!!!
n, l, r, t = map(int, input().split())
mat = [[0] * (n + 2 * r) for _ in range(n + 2 * r)]
for i in range(r, n + r):
    mat[i] = [0] * r + list(map(int, input().split())) + [0] * r
count = 0
#计算二维前缀和
sum_mat = [[0] * (n + 2 * r) for _ in range(n + 2 * r)]
for i in range(r, n + r):
    for j in range(r, n + r):
        sum_mat[i][j] = mat[i][j] + sum_mat[i][j - 1] + sum_mat[i - 1][j] - sum_mat[i - 1][j - 1]

for i in range(r, n + r):
    for j in range(r, n + r):
        # 判断领域内元素个数
        # 领域x,y最左,最右坐标
        min_i = i - r if i - r > r - 1 else r
        max_i = i + r if i + r < n + r else n + r - 1
        min_j = j - r if j - r > r - 1 else r
        max_j = j + r if j + r < n + r else n + r - 1
        # print(min_i, min_j, max_i, max_j)
        nums = (max_i - min_i + 1) * (max_j - min_j + 1)
        # print(nums)
        sum_m = sum_mat[max_i][max_j] - sum_mat[i - r - 1][max_j] - sum_mat[max_i][j - r - 1] + \
                sum_mat[i - r - 1][j - r - 1]
        flag = sum_m / nums
        if flag <= t:
            count = count + 1
print(count)




总结

脑子要裂开,出去跑步冷静一下。
请添加图片描述
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078009.html

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

相关文章

MySQL对日期计算

mysql日期计算 前言使用场景一 日期作减法操作二 获取前一天或后一天的日期三 获取前一个月或后一个月的日期四 获取前一年或后一年的日期五 查询一个月内的申请记录 总结 前言 在MySQL中&#xff0c;日期计算是非常常见的操作。其中&#xff0c;日期减法操作可以用来计算两个…

PTE DESCRIBE IMAGE做题方法 (一)

目录 界面切换来判断 到了哪一种题目 说废话 还是会给流利度加分 回答问题的时候想想哪些不说 必定是不行的呢 事先会预计学生会说些什么 鱼池理论 1st:Ttle.Unit,Legends.非说不可2nd:X-axis.Y-axis. 多多益善3 rd:Extra information(implications&development)不…

滚雪球学Java(45):探秘Java Runtime类:深入了解JVM运行时环境

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

《深入理解计算机系统》(2):虚拟内存

虚拟内存是一种对主存的抽象概念。 &#xff08;1&#xff09;将主存看作一个存储在磁盘上的地址空间的高速缓存&#xff0c;在主存中只保存活动区域&#xff0c;并根据需要在磁盘和主存之间来回传送数据&#xff0c;通过这种方式高效地使用内存 &#xff08;2&#xff09;为每…

30天入门Python(基础篇)——第4天:Python中的【输入】+【数据类型】的认识(万字建议点赞收藏)

文章目录 专栏导读上节课回顾Python中的输入Python中的数据类型1、可变数据类型2、不可变数据类型 如何查看一个变量(数据)的变量类型字符串&#xff08;str不可变&#xff09;整数&#xff08;int不可变&#xff09;浮点数&#xff08;float不可变&#xff09;列表&#xff08…

```,```中间添加 # + 空格 + 空行后遇到的底部空行出错,书接上回,处理空行

【python查找替换&#xff1a;查找空行&#xff0c;空行前后添加&#xff0c;中间添加 # 空格 空行后遇到的第1行文字&#xff1f; - CSDN App】http://t.csdnimg.cn/QiKCV def is_blank(line):return len(line.strip()) 0txt 时间戳&#xff1a; ("%Y-%m-%d %H:%M:…

软件设计师考试知识点大全思维导图

软件设计师考试知识点大全思维导图 欢迎交流学习

BDJ-A02-32、BRJ-A02-50比例减压阀放大板

BDJ-A02-210、BDJ-A02-100、BDJ-A02-32、BRJ-A02-50、BRJ-A02-100、BRJ-A02-210、BRJ-A02-315、BCJ-A03-315、BCJ-A06-100、BCJ-A08-50、BYJ-A02-20、BYJ-A02-40是比例减压阀&#xff0c;阀的二次压力与输入电信号成正比。此类阀工作时是通过电子放大器提供比例电磁铁的驱动电流…

技术干货:解密最受欢迎的开源 Serverless 框架弹性技术实现

作者&#xff1a;元毅 Knative 是一款基于 Kubernetes 的开源 Serverless 应用编排框架&#xff0c;其目标是制定云原生、跨平台的 Serverless 应用编排标准。Knative 主要功能包括基于请求的自动弹性、缩容到 0、多版本管理、基于流量的灰度发布以及事件驱动等。 弹性是 Ser…

kali linux安装redis

官网&#xff1a;Install Redis from Source | Redis wget https://download.redis.io/redis-stable.tar.gztar -xzvf redis-stable.tar.gz cd redis-stable make显示如下即可进入下一步 sudo make installredis-server 可以看到已经可以使用了。 但是由于第一次使用导致了re…

微信支付v2

文档&#xff1a; https://pay.weixin.qq.com/wiki/doc/api/index.html 微信小程序&#xff1a;https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter11_1 需要一个微信认证后的小程序&#xff0c;&#xff0c;还需要一个&#xff0c;在微信商户平台&#xff0c;&…

matlab实现对极地投影数据的投影转换

图片摘要 前段时间&#xff0c;我写了一个专栏《联合matlab和Arcgis进行netcdf格式的雪覆盖数据的重新投影栅格》&#xff0c;介绍了如何利用Arcgis实现极地投影的转换。今天&#xff0c;我提供一个matlab重采样的方法实现投影转换。 我们这次使用的数据是北冰洋逐日的海平面高…

【每日一题】1094. 拼车

1094. 拼车 - 力扣&#xff08;LeetCode&#xff09; 车上最初有 capacity 个空座位。车 只能 向一个方向行驶&#xff08;也就是说&#xff0c;不允许掉头或改变方向&#xff09; 给定整数 capacity 和一个数组 trips , trip[i] [numPassengersi, fromi, toi] 表示第 i 次旅…

相机坐标系之间的转换

一、坐标系之间的转换 一个有4个坐标系&#xff1a;图像坐标系、像素坐标系、相机坐标系、世界坐标系。 1.图像坐标系和像素坐标系之间的转换 图像坐标系和像素坐标系在同一个平面&#xff0c;利用平面坐标系之间的转换关系可以之知道两个坐标系变换的公式&#xff0c;并且该…

Log4j2的JNDI注入漏洞(CVE-2021-44228)原理分析与思考

目录 前言 一、 前置知识 1.1 Log4j2 1.2 Log4j2 Lookup 1.3 JNDI 1.4 JNDI注入 二、 漏洞复现 三、 漏洞原理 3.1 MessagePatternConverter.format() 3.2 StrSubstitutor.resolveVariable() 3.3 Interpolator.lookup() 3.4 JndiLookup.lookup() 3.5 JndiManager.l…

cos文件上传demo (精简版通用)

1. 依赖 <!--腾讯云cos依赖--> <dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.54</version> </dependency> 2. FileController import com.ruoyi.common.core.domain.AjaxRe…

网络层协议—IP协议

网络层协议—IP协议 文章目录 网络层协议—IP协议网络层简介IP协议简介IP协议文格式IP协议报头实现网络互联的使用设备 网段划分IP地址划分子网掩码IP地址的特点特殊的IP地址IP地址的数量限制私有IP地址和公网IP地址NAT技术 路由报文的分片与组装IP地址和硬件地址 网络层简介 …

2023.10.8 基本 Thread 线程详解

目录 Thread 常见构造方法 Thread 常见属性 创建一个 Thread 线程 使用 jconsole 命令观察线程 中断一个 Thread 线程 等待一个 Thread 线程 休眠当前 Thread 线程 让出当前 Thread 线程的 CPU 资源 线程的状态 Thread 常见构造方法 方法说明Thread()创建线程对…

Nginx 重新编译添加新的模块

编译安装Nginx的时候&#xff0c;有些模块默认并不会安装&#xff0c;比如http_ssl_module&#xff0c;那么为了让Nginx支持HTTPS&#xff0c;必须添加这个模块。 下面讲解如何在已经安装过后再次添加新的模块。 1、找到安装nginx的源码根目录(即安装包存放目录)&#xff0c;…

2023年【G1工业锅炉司炉】考试题及G1工业锅炉司炉模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年G1工业锅炉司炉考试题为正在备考G1工业锅炉司炉操作证的学员准备的理论考试专题&#xff0c;每个月更新的G1工业锅炉司炉模拟考试祝您顺利通过G1工业锅炉司炉考试。 1、【多选题】TSGG0001-2012《锅炉安全技术监…