CCF CSP认证 历年题目自练Day32

题目一

试题编号: 202209-1
试题名称: 如此编码
时间限制: 1.0s
内存限制: 512.0MB
问题描述:
题目背景
某次测验后,顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字,小 P 同学不禁陷入了沉思……
题目描述
已知某次测验包含 n 道单项选择题,其中第 i 题(1≤i≤n)有 ai 个选项,正确选项为 bi,满足 ai≥2 且 0≤bi<ai。比如说,ai=4 表示第 i 题有 4 个选项,此时正确选项 bi 的取值一定是 0、1、2、3 其中之一。
顿顿老师设计了如下方式对正确答案进行编码,使得仅用一个整数 m 便可表示 b1,b2,⋯,bn。
首先定义一个辅助数组 ci,表示数组 ai 的前缀乘积。当 1≤i≤n 时,满足:
ci=a1×a2×⋯×ai
特别地,定义 c0=1。
于是 m 便可按照如下公式算出:
在这里插入图片描述
易知,0≤m<cn,最小值和最大值分别当 bi 全部为 0 和 bi=ai−1 时取得。
试帮助小 P 同学,把测验的正确答案 b1,b2,⋯,bn 从顿顿老师留下的神秘整数 m 中恢复出来。
输入格式
从标准输入读入数据。
输入共两行。
第一行包含用空格分隔的两个整数 n 和 m,分别表示题目数量和顿顿老师的神秘数字。
第二行包含用空格分隔的 n 个整数 a1,a2,⋯,an,依次表示每道选择题的选项数目。
输出格式
输出到标准输出。

输出仅一行,包含用空格分隔的 n 个整数 b1,b2,⋯,bn,依次表示每道选择题的正确选项。

样例1输入
15 32767
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

样例1输出
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

样例2输入
4 0
2 3 2 5

样例2输出
0 0 0 0

样例3输入
7 23333
3 5 20 10 4 3 10

样例3输出
2 2 15 7 3 1 0

样例3解释
在这里插入图片描述
提示
对任意的 1≤j≤n,因为 cj+1,cj+2,⋯ 均为 cj 的倍数,所以 m 除以 cj 的余数具有如下性质:
请添加图片描述
其中 % 表示取余运算。令 j 取不同的值,则有如下等式:
m % c1 = c0×b1
m % c2 = c0×b1+c1×b2
m % c3 = c0×b1+c1×b2+c2×b3⋯

题目分析(个人理解)

  1. 此题可以理解为一个加密解密的过程,测验的正确答案bn在m中,现在要输出正确答案,还是先看输入,第一行输入n个题目和m的值,之后输入每道题有几个选项(用空格分开)。
  2. 我还是选择列表存储,这道题关键是理解解密的过程,这个过程就是给出m推导出b的值,在题目的提示部分已经告诉我们了,当i=3时m % c3 = c0×b1+c1×b2+c2×b3那么求b3只需要m%3之后减去c2之前的部分然后对c2取整即可。
  3. 上代码!!!
# 输入n题目数量和m神秘数字
n, m = map(int, input().split())
# 输入n道选择题的选项数字
a = list(map(int, input().split()))
# 设置b数组来存放每道选择题的正确选项
b = []
# c为c0,初始值为1
c = 1
# tc为辅助值,即为t的下一个值
tc = 1
# temp为辅助值,为记录除了此次的C*B之前所有C*B的值的和
temp = 0
# 通过循环进行每道题答案的更新
for i in a:# 将tc的值进行更新为此时c的下一个值tc = i*c# 向b数组中添加此时题目的正确选项b.append((m%tc-temp)//c)# 更新temp的值temp += c*b[-1]# 更新c的值c = tc
# 输出每道题的正确选项
print(*b)

题目二

试题编号: 202209-2
试题名称: 何以包邮?
时间限制: 1.0s
内存限制: 512.0MB
问题描述:
题目描述
新学期伊始,适逢顿顿书城有购书满 x 元包邮的活动,小 P 同学欣然前往准备买些参考书。
一番浏览后,小 P 初步筛选出 n 本书加入购物车中,其中第 i 本(1≤i≤n)的价格为 ai 元。
考虑到预算有限,在最终付款前小 P 决定再从购物车中删去几本书(也可以不删),使得剩余图书的价格总和 m 在满足包邮条件(m≥x)的前提下最小。

试帮助小 P 计算,最终选购哪些书可以在凑够 x 元包邮的前提下花费最小?

输入格式
从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数 n 和 x,分别表示购物车中图书数量和包邮条件。

接下来输入 n 行,其中第 i 行(1≤i≤n)仅包含一个正整数 ai,表示购物车中第 i 本书的价格。输入数据保证 n 本书的价格总和不小于 x。

输出格式
输出到标准输出。

仅输出一个正整数,表示在满足包邮条件下的最小花费。

样例1输入
4 100
20
90
60
60

样例1输出
110

样例1解释
购买前两本书(20+90)即可包邮且花费最小。

样例2输入
3 30
15
40
30

样例2输出
30

样例2解释
仅购买第三本书恰好可以满足包邮条件。

样例3输入
2 90
50
50

样例3输出
100

样例3解释
必须全部购买才能包邮。

子任务
70% 的测试数据满足:n≤15;

全部的测试数据满足:n≤30,每本书的价格 ai≤104 且 x≤a1+a2+⋯+an。

提示
对于 70% 的测试数据,直接枚举所有可能的情况即可。

题目分析(个人理解)

  1. 注意题目条件,有两个判断要求,第一个要求满足包邮条件,第二个要求在第一个要求的基础上使得总价格最小;但是为了方便我可以先将每次拿一次书之后的总价格最小值都存下来(记忆化),就是每拿一本,就从新按照价格最便宜的先选,依次重新排序选择,一直选到第n个, 然后再去判断是否满足包邮条件即可。
  2. 这里这是一个重叠子问题,(子问题是原大问题的小版本,他们计算步骤完全一样,可以和递归联系起来)一个子问题多次计算耗费大量时间,用动态规划处理,每个子问题只需要计算一次,从而避免重复计算,具体的做法是,先分析得到最优子结构,然后用递推或者带记忆化搜索的递归进行实现。
  3. 先定义一个数组dp=[]大小就是N*X。用来储存每一个价格的最小花费,然后将每本书的价格存入列表a[]。第二步将每多拿一本书的之后的价格最小值都存入dp中,最后遍历dp如果大于等于X,也就是满足了包邮条件那么就直接输出当前dp[i]即可。
  4. 尤其注意实现自我滚动的时候,j是反过来循环的,就是从后面往前面覆盖。
  5. 上代码!!!
# 输入购物车中的图书数量n和包邮最低值x
n, x = map(int,input().split())
# 设置a来存储每个书的价格
a = []
# 设置动态规划数组存储每个价格的最小花费
dp = [0]*(n*x)
# 进行遍历,将每本书的价格依次存入a
for i in range(n):t = int(input())a.append(t)
# 设置pre来保存目前满足包邮的最小花费
pre = sum(a)
# 01背包解法,将每个地方的最优解存入dp数组中
for i in range(n):for j in range(pre,a[i]-1,-1):#自我滚动dp[j] = max(dp[j],dp[j-a[i]]+a[i])
# 从x开始遍历,找到超过x的dp[i]
for i in range(x,pre+1):if dp[i]>=x:print(dp[i])break

总结

又又又要补一期动态规划的内容。
请添加图片描述

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

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

相关文章

C# Convert和BitConverter类学习

前言&#xff1a; C# Convert是一个比较好用的强制转换&#xff0c;相比我们之前用的(int)或者是类型.Parse()&#xff0c;Convert给我们提供了很多的选项&#xff0c;特别是对于有字节要求的变量&#xff0c;Convert简直就是C#编程的福音&#xff0c;BitConvert对于byte数组转…

linux下文件存储系统(inode/目录项/硬链接)

概念&#xff1a; 关键点&#xff1a; &#xff08;1&#xff09;inode 也叫做文件属性管理结构体 &#xff08;2&#xff09;目录项里面存两个东西 文件名和 inode号。通过inode号可以找到磁盘上的文件。 &#xff08;3&#xff09;给文件创建硬链接的时候&#xff0c;两个…

中国矿业大学-JAVA期末备考

JAVA里面&#xff0c;“”和“equals"的区别是什么呢&#xff1f; 1.""操作符用于比较两个对象的引用是否相等。也就是说&#xff0c;它会检查两个对象是否指向内存中的同一个地址。如果两个对象的引用完全相同&#xff0c;则""返回true&#xff1b;否…

uniapp 小程序实现图片宽度100%、高度自适应的效果

因为image组件默认是有宽度跟高度的&#xff0c;所以这个高度不怎么好写 通过load事件来控制图片的高度 话不多说&#xff0c;直接上代码&#xff0c; <image class"img" src"/static/image.png" :style"{ height: imgHeight px }"mode&q…

CentOS 7 服务器上创建新用户及设置用户密码有效期

一、创建用户 1、以 root 用户身份登录到 CentOS 服务器 2、运行以下命令以创建新用户&#xff1a; useradd -m -s /bin/bash username其中&#xff0c;username 是您要创建的新用户的用户名。该命令将创建一个新用户并为其分配一个主目录。3、运行以下命令以设置新用户的密码…

Frame Buffer设备驱动 (ili9488 3.5寸tft屏)

Frame Buffer设备驱动 Frame Buffer设备ili9488介绍驱动编写代码编写ili9488.c设备树修改测试ili9488代码分析 LCD资料下载 Frame Buffer设备 在早期的输出显示设备中&#xff0c;大部分为CRT显示器&#xff0c;随着技术的不断发展&#xff0c;现在大部分使用的是液晶显示器。这…

MySQL视图、用户管理和C语言链接

文章目录 1. 视图1.1 基本使用 2. 用户管理2.1 用户信息2.2 创建用户2.3 修改用户密码2.4 删除用户 3. 数据库的权限3.1 给用户授权3.2 回收权限 4. mysql connect4.1 Connector/C 使用4.2 mysql接口介绍 1. 视图 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一…

百度SEO优化的特点(方式及排名诀窍详解)

百度SEO优化的特点介绍&#xff1a; 百度SEO优化是指对网站进行优化&#xff0c;使其在百度搜索引擎中获得更好的排名&#xff0c;进而获取更多的流量和用户。百度SEO优化的特点是综合性强、效果持久、成本低廉、投资回报高。百度的搜索算法不断更新&#xff0c;所以长期稳定的…

开源任务调度框架

本文主要介绍一下任务调度框架Flowjob的整体结构&#xff0c;以及整体的心路历程。 功能介绍 flowjob主要用于搭建统一的任务调度平台&#xff0c;方便各个业务方进行接入使用。 项目在设计的时候&#xff0c;考虑了扩展性、稳定性、伸缩性等相关问题&#xff0c;可以作为公司…

YOLOv5网络结构图

网络结构图&#xff08;简易版和详细版&#xff09; 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; backbone&#xff0c;neck&#xff0c;head。 如上图所示…

【排序算法】详解直接插入排序和希尔排序原理及其性能分析

文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法&#xff0c; 基本思想…

3、Linux下安装

以下操作仅限于rh系列:支持rpm/yum安装方式&#xff0c;不支持deb/apt安装方式。 以下操作仅限于rh系列&#xff1a;支持rpm/yum安装方式&#xff0c;不支持 deb/apt安装方式。 1、在线下载安装包&#xff1a; wget https://downloads.mysql.com/archives/get/p/23/file/ m…

打造个人专属形象!工业级人物写真生成工具FaceChain开源

简介 FaceChain 是一个可以用来打造个人数字形象的深度学习模型工具。用户仅需要提供最低一张照片即可获得独属于自己的个人形象数字替身。FaceChain 支持在 gradio 的界面中使用模型训练和推理能力&#xff0c;也支持资深开发者使用 python 脚本进行训练推理。 Github链接&…

长短期记忆网络(LSTM)

一. 什么是LSTM Long Short Term Memory&#xff08;LSTM&#xff0c;长短期记忆&#xff09;是一种特殊的递归神经网络。这种网络与一般的前馈神经网络不同&#xff0c;LSTM可以利用时间序列对输入进行分析。 简而言之&#xff0c;当使用前馈神经网络时&#xff0c;神经网络会…

Linux 中如何安全地抹去磁盘数据?

哈喽大家好&#xff0c;我是咸鱼 离过职的小伙伴都知道&#xff0c;离职的时候需要上交公司电脑&#xff0c;但是电脑里面有许多我们的个人信息&#xff08;聊天记录、浏览记录等等&#xff09; 所以我们就需要先把这些信息都删除&#xff0c;确保无法恢复之后才上交 即有些…

MongoDB 索引和常用命令

一、基本常用命令 1.1 案例需求 存放文章评论的数据存放到 MongoDB 中&#xff0c;数据结构参考如下&#xff0c;其中数据库为 articledb&#xff0c; 专栏文章评论 comment 字段名称 字段含义 字段类型 备注 _id ID ObjectId或String Mongo的主键的字段 articlei…

怎么团队合作,协作开发

一、代码托管平台 我是在大一下的一个竞赛中接触到的代码托管平台 那个时候我也算是什么都不会的&#xff0c;不过不得不说这个确实比较重要&#xff0c;对我造成了一些冲击 在我看来&#xff0c;代码托管平台的作用就是在一个中转站&#xff08;仓库&#xff09;上存储我们写…

自己在家给电脑重装系统Win10教程

自己在家怎么给电脑重装系统Win10&#xff1f;Win10电脑系统如果操作时间特别长了&#xff0c;就可能出现卡顿、蓝屏等系统问题&#xff0c;这时候用户就想给电脑重装系统&#xff0c;却不知道重装具体的操作步骤&#xff0c;下面小编给大家详细介绍自己在家给电脑重装Win10系统…

k8s-13 存储之secret

Secret 对象类型用来保存敏感信息&#xff0c;例如密码、OAuth 令牌和 ssh key。 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活 。 Pod 可以用两种方式使用 secret:作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里 当 kubelet 为 pod 拉…

github 中关于Pyqt 的module view 操作练习

代码摘自&#xff0c;Pyside6 中的示例代码部分 # -*- coding: utf-8 -*- import sys from PySide6.QtWidgets import * from PySide6.QtGui import * from PySide6.QtCore import * from PySide6.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery import os os.chdir(os…