CCF CSP认证 历年题目自练Day32

news2024/11/29 7:58:38

题目一

试题编号: 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.coloradmin.cn/o/1096177.html

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

相关文章

TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系

1. TCP发送接口&#xff1a;send() TCP发送数据的接口有send&#xff0c;write&#xff0c;sendmsg。在系统内核中这些函数有一个统一的入口&#xff0c;即sock_sendmsg()。由于TCP是可靠传输&#xff0c;所以对TCP的发送接口很容易产生误解&#xff0c;比如sn send(...); 错误…

如何从 Pod 内访问 Kubernetes 集群的 API

Kubernetes API 是您检查和管理集群操作的途径。您可以使用Kubectl CLI、工具(例如curl)或流行编程语言的官方集成库来使用 API 。 该 API 也可供集群内的应用程序使用。Kubernetes Pod 会自动获得对 API 的访问权限,并且可以使用提供的服务帐户进行身份验证。您可以通过使…

06-React的路由

06-React的路由 1.相关理解 1).SPA的理解 单页Web应用&#xff08;single page web application&#xff0c;SPA&#xff09;。整个应用只有一个完整的页面。点击页面中的链接不会刷新页面&#xff0c;只会做页面的局部更新。数据都需要通过ajax请求获取, 并在前端异步展现。…

2018-2019 ACM-ICPC, Asia Nanjing Regional Contest G. Pyramid(组合数学 计数)

题目 t(t<1e6)组样例&#xff0c;每次给定一个n(n<1e9)&#xff0c;统计边长为n的上述三角形的等边三角形个数 其中等边三角形的三个顶点&#xff0c;可以在所有黑色三角形&白色三角形的顶点中任取&#xff0c; 答案对1e97取模 思路来源 申老师 & oeis A0003…

第 367 场 LeetCode 周赛题解

A 找出满足差值条件的下标 I 模拟 class Solution { public:vector<int> findIndices(vector<int> &nums, int indexDifference, int valueDifference) {int n nums.size();for (int i 0; i < n; i)for (int j 0; j < i; j)if (i - j > indexDiffe…

【探索Linux】—— 强大的命令行工具 P.11(基础IO,文件操作)

阅读导航 前言一、C语言的文件操作二、C的文件操作三、Linux系统文件操作&#xff08;I/O接口&#xff09;1. open()⭕传入多个打开方式&#xff08;按位或操作将不同的标志位组合在一起&#xff09; 2. write()3. read()4. close()5. lseek() 温馨提示 前言 前面我们讲了C语言…

vue3后台管理框架之axios二次封装

在开发项目的时候避免不了与后端进行交互,因此我们需要使用axios插件实现发送网络请求。在开发项目的时候 我们经常会把axios进行二次封装。 目的: 1:使用请求拦截器,可以在请求拦截器中处理一些业务(开始进度条、请求头携带公共参数) 2:使用响应拦截器,可以在响应拦截器…

Hadoop3教程(十二):MapReduce中Shuffle机制的概述

文章目录 &#xff08;95&#xff09; Shuffle机制什么是shuffle&#xff1f;Map阶段Reduce阶段 参考文献 &#xff08;95&#xff09; Shuffle机制 面试的重点 什么是shuffle&#xff1f; Map方法之后&#xff0c;Reduce方法之前的这段数据处理过程&#xff0c;就叫做shuff…

华为ICT——云计算基础知识、计算类技术听课笔记

ICT(information and communications technology):信息与通信技术 传统IT架构缺点 TCO&#xff1a;总体拥有成本 云计算模式 云计算价值 云计算通用点 虚拟化技术&#xff1a;将单台物理服务器虚拟为多台虚拟机使用&#xff0c;多台虚拟机共享物理服务器硬件资源。 虚拟化本质…

使用PM2部署spring-boot项目

一、打包应用 1、先清理之前的 2、修改pom.xml文件关于项目名称版本及jdk版本 3、在idea中直接打包项目 4、等打包完成后会在target文件夹下有一个xx.jar的文件,拷贝出来放到一个文件夹下&#xff0c;或者服务器指定目录下 二、使用pm2部署.jar文件 1、pm2的安装,参考地…

Linux性能优化--性能工具:特定进程CPU

4.0 概述 在用系统级性能工具找出是哪个进程降低了系统速度之后&#xff0c;你需要用特定进程性能工具来发现这个进程的行为。对此&#xff0c;Linux提供了丰富的工具用于追踪一个进程和应用程序性能的重要统计信息。 阅读本章后&#xff0c;你将能够&#xff1a; 确定应用程…

nodejs+vue水浒鉴赏平台系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

unity脚本的生命周期

方法名称调用时间Awake最早调用&#xff0c;所以一般可以在此实现单例模式OnEnable组件激活后调用&#xff0c;在Awake后会调用一次Start在Update之前调用一次&#xff0c;在OnEnable之后调用&#xff0c;可以在此设置一些初始值FixedUpdate固定频率调用方法&#xff0c;每次调…

多模态大模型NextGPT整体结构图、模型示意图和使用模型时示意图

NextGPT模型整体结构 项目地址 论文地址 模型示意图 使用模型时示意图

彩虹易支付 9.27 最新版加订单查询 sy 更新版

彩虹易支付 9.27 最新版加订单查询 sy 更新版 修复客服 2023/09/25&#xff1a; 1. 新增支付宝红包支付插件 2. 新增支付宝 APP 支付转 H5 支付 3. 更新了几个支付插件 安装教程&#xff1a; 环境&#xff1a;php7.2 上传后访问域名进行安装即可 源码下载&#xff1a;ht…

allegro中shape的一些基本操作(一)——添加和修改shape

添加shape 简单添加shape的方式有3种&#xff0c;如下图所示 点击选择相应的shape模式后可以在option面板中设置相应的shape参数&#xff08;这里不做过多介绍&#xff0c;里面可以设置shape的大小、静态或动态shape等参数&#xff09;&#xff0c;然后再用鼠标在相应的层上添…

2022最新版-李宏毅机器学习深度学习课程-P17 卷积神经网络CNN

一、CNN 用于图像分类 需要图片大小统一 彩色图像分为R G B 三层&#xff0c;展平后首尾相接 值代表着颜色的强度 图像识别中不需要全连接的&#xff0c;参数太多了 观测1&#xff1a;通过判断多个小局部图像就能判断出图片标签 感受野的定义 简化1 感受野可以重叠&#xff…

MyBatisPlus的学习项目页面

MyBatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库表信息 类名驼峰转下划线作为表名 名为id的字段作为主键 变量名驼峰转下划线作为表的字段名 常见注解 TableName&#xff1a;用来指定表名 Tableld&#xff1a;用来指定表中的主键字段信息 Tabl…

Linux:Mac VMware Fusion13以及CentOS7安装包

Linux&#xff1a;Mac VMware Fusion13以及CentOS7安装包 1. Mac VMware Fusion132. CentOS7安装包3. 安装 1. Mac VMware Fusion13 下载官网地址&#xff1a;https:www.vmware.com/products/fusion/fusion-evaluation.html 2. CentOS7安装包 注意是m芯片需要使用arm架构的i…

周记之学习总结

你在人群中看到的每一个耀眼的女孩&#xff0c;都是踩着刀尖过来的。你如履平地般地舒适坦然&#xff0c;当然不配拥有任何光芒&#xff1b; 10.11-10.12 思来想去还是不舍得&#xff0c;搞了一下这个jwt&#xff0c;看了很多视频和博客&#xff0c;一直没看懂&#xff0c;两…