CCF CSP认证历年题目自练Day28

2023-10-12 00:20

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

题目一

试题编号: 202109-1
试题名称: 数组推导
时间限制: 1.0s
内存限制: 512.0MB
请添加图片描述
样例1输入
6
0 0 5 5 10 10

样例1输出
30
15
请添加图片描述
样例2输入
7
10 20 30 40 50 60 75

样例2输出
285
285
请添加图片描述

题目分析(个人理解)

  1. 我是这样理解的,第一行输入n个整数,第二行输入n个整数,这些整数单调不减,然后求这些整数的和就是求题目中sum的最大值,sum的最小值就是n个整数去重之后的和。(不理解我为啥这样写可以再多读题目自己理解)
  2. 那真的很简单,我还是选择列表num存储,然后求和就是sum的最大值,去重之后求和就是sum的最小值,那么对于此题的去重我有两种方法,第一种对元素进行两两判断,如果不等就追加写入新列表,我在num[0]位插入0,然后
    for i in range(n):
    if num[i]!=num[i+1]:
    l.append(num[i+1])
    为什么要在num[0]填0,是因为原num的num[0]!=num[1]我追加写入的只有num[1]那么求和的时候会漏掉num[0]。
  3. 第二种方法是判断列表num中不相同的元素,然后将不相同的写入新的列表,然后对新列表求和即是sum的最小值
  4. 上代码!!!
#方法一
n=int(input())
l=[]
num=list(map(int,input().split()))
num.insert(0,0)
for i in range(n):if num[i]!=num[i+1]:l.append(num[i+1])
print(sum(num))
print(sum(l))
#方法二
n=int(input())
l=[]
num=list(map(int,input().split()))
for i in num:if i not in l:l.append(i)
print(sum(num))
print(sum(l))

题目二

试题编号: 202109-2
试题名称: 非零段划分
时间限制: 1.0s
内存限制: 512.0MB
请添加图片描述
样例1输入
11
3 1 2 0 0 2 0 4 5 0 2

样例1输出
5

请添加图片描述
请添加图片描述
请添加图片描述

题目分析(个人理解)

  1. 我们可以将想像成一个海岛问题,每一个超过海平面的小山顶就是一个非零段,p理解为海平面,现在就要求什么时候超过海平面的小山顶最多。
  2. 现在设海面为0,岛屿为非零段,输入数组nums中的值代表当前下标位置的海拔高度。海平面从max(L)下降至1(海平面高度记为level),在海平面下降过程中,i处多了一个岛屿(非零段)当且仅当此时海平面高度<=i处海拔高度且[i-1],[i+1]处都为水(海拔小于海平面),i处减少了一个岛屿当且仅当此时海平面高度<=i处海拔高度且[i-1],[i+1]处都已经为岛屿。记数组island代表每个位置的目前状况(水或陆地),即island[i]=0当且仅当nums[i]<level,island[i]=1当前仅当nums[i]>=level。
  3. 将第二行输入的列表A[] 元素前后加0,表示都在海里,我选择用枚举函数enumerate()对列表,也就是岛屿的山顶标号,如果A的元素等于0就说明是海,不用记录,for id, num in enumerate(A):
#以下展示了使用 enumerate() 方法的实例:>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]#for 循环使用 enumerate
>>> seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
...
0 one
1 two
2 three
  1. 我将每一个山顶的序号放入字典idx_dic{}的values里,将每一个山顶的高度放到keys里,字典的值是列表形式。
  2. 上代码!!!
n = int(input())
# 数组前后补零
A = [0]+list(map(int, input().split()))+[0]
idx_dic = {}
maxnum = 0
for id, num in enumerate(A):# num是0不用记录if not num:continuemaxnum = max(maxnum, num)if idx_dic.get(num) is None:idx_dic[num] = [id]else:idx_dic[num].append(id)cnt, ans = 0, 0
island = [0]*(n+2)
for level in range(maxnum, 0, -1):if idx_dic.get(level) is None:continuefor idx in idx_dic[level]:# 如果前后是陆地if island[idx-1] and island[idx+1]:cnt -= 1# 如果前后是水elif not island[idx-1] and not island[idx+1]:cnt += 1island[idx] = 1ans = max(ans, cnt)
print(ans)

总结

饭吃多了跑不动。
请添加图片描述
请添加图片描述

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



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

相关文章

浅析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皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com