CCF CSP认证 历年题目自练Day27

2023-10-11 01:12

本文主要是介绍CCF CSP认证 历年题目自练Day27,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目一

试题编号: 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 rmax_i = i + r if i + r < n + r else n + r - 1min_j = j - r if j - r > r - 1 else rmax_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 / numsif flag <= t:count = count + 1
print(count)

总结

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

这篇关于CCF CSP认证 历年题目自练Day27的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/184457

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入