位置: IT常识 - 正文

CCF-CSP真题《202212-2 训练计划》思路+python,c++满分题解(2020ccf csp报名和考试时间)

编辑:rootadmin
CCF-CSP真题《202212-2 训练计划》思路+python,c++满分题解

推荐整理分享CCF-CSP真题《202212-2 训练计划》思路+python,c++满分题解(2020ccf csp报名和考试时间),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:2020ccf csp报名和考试时间,ccf csp-j/s 2021,ccf csp-j/s 2021,ccf csp成绩什么时候出,ccf csp考试内容,ccf-csp考试,ccf csp考试时间,ccf csp试题,内容如对您有帮助,希望把文章链接给更多的朋友!

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全

试题编号:202212-2试题名称:训练计划时间限制:1.0s内存限制:512.0MB问题描述:问题背景

西西艾弗岛荒野求生大赛还有 n 天开幕!

问题描述

为了在大赛中取得好成绩,顿顿准备在 n 天时间内完成“短跑”、“高中物理”以及“核裂变技术”等总共 m 项科目的加强训练。其中第 i 项(1≤i≤m)科目编号为 i,也可简称为科目 i。已知科目 i 耗时 ti 天,即如果从第 a 天开始训练科目 i,那么第 a+ti−1 天就是该项训练的最后一天。

大部分科目的训练可以同时进行,即顿顿在同一天内可以同时进行多项科目的训练,但部分科目之间也存在着依赖关系。如果科目 i 依赖科目 j,那么只能在后者训练结束后,科目 i 才能开始训练。具体来说,如果科目 j 从第 a 天训练到第 a+tj−1 天,那么科目 i 最早只能从第 a+tj 天开始训练。还好,顿顿需要训练的 m 项科目依赖关系并不复杂,每项科目最多只依赖一项别的科目,且满足依赖科目的编号小于自己。那些没有任何依赖的科目,则可以从第 1 天就开始训练。

对于每一项科目,试计算:

1)最早开始时间:该科目最早可以于哪一天开始训练?

2)最晚开始时间:在不耽误参赛的前提下(n 天内完成所有训练),该科目最晚可以从哪一天开始训练?

n 天内完成所有训练,即每一项科目训练的最后一天都要满足 ≤n。需要注意,顿顿如果不能在 n 天内完成全部 m 项科目的训练,就无法参加大赛。这种情况下也就不需要再计算“最晚开始时间”了。

输入格式

从标准输入读入数据。

输入共三行。

输入的第一行包含空格分隔的两个正整数 n 和 m,分别表示距离大赛开幕的天数和训练科目的数量。

输入的第二行包含空格分隔的 m 个整数,其中第 i 个(1≤i≤m)整数 pi 表示科目 i 依赖的科目编号,满足 0≤pi<i;pi=0 表示科目 i 无依赖。

输入的第三行包含空格分隔的 m 个正整数,其中第 i 个(1≤i≤m)数 ti 表示训练科目 i 所需天数,满足 1≤ti≤n。

输出格式

输出到标准输出中。

输出共一行或两行。

输出的第一行包含空格分隔的 m 个正整数,依次表示每项科目的最早开始时间。

如果顿顿可以在 n 天内完成全部 m 项科目的训练,则继续输出第二行,否则输出到此为止。

输出的第二行包含空格分隔的 m 个正整数,依次表示每项科目的最晚开始时间。

样例 1 输入

10 5 0 0 0 0 0 1 2 3 2 10

样例 1 输出

1 1 1 1 1 10 9 8 9 1

样例 1 说明

五项科目间没有依赖关系,都可以从第 1 天就开始训练。

10 天时间恰好可以完成所有科目的训练。其中科目 1 耗时仅 1 天,所以最晚可以拖延到第 10 天再开始训练;而科目 5 耗时 10 天,必须从第 1 天就开始训练。

样例 2 输入CCF-CSP真题《202212-2 训练计划》思路+python,c++满分题解(2020ccf csp报名和考试时间)

10 7 0 1 0 3 2 3 0 2 1 6 3 10 4 3

样例 2 输出

1 3 1 7 4 7 1

样例 2 说明

七项科目间的依赖关系如图所示,其中仅科目 5 无法在 10 天内完成训练。

具体来说,科目 5 依赖科目 2、科目 2 又依赖于科目 1,因此科目 5 最早可以从第 4 天开始训练。

样例 3 输入

10 5 0 1 2 3 4 10 10 10 10 10

样例 3 输出

1 11 21 31 41

子任务

70 的测试数据满足:顿顿无法在 n 天内完成全部 m 项科目的训练,此时仅需输出一行“最早开始时间”;

全部的测试数据满足 0<n≤365 且 0<m≤100。

真题来源:训练计划

 感兴趣的同学可以如此编码进去进行练习提交

直接无脑解(70分):

n, m = map(int,input().split())p = [0]+[i for i in map(int,input().split())]t = [0]+[i for i in map(int,input().split())]earliest = [0 for _ in range(m+1)]latest = [0 for _ in range(m+1)]# 将每个科目的最早时间确定for i in range(1,m+1): if p[i]==0: earliest[i] = 1 else: earliest[i] = earliest[p[i]]+t[p[i]]# 输出每项科目的最早开始时间print(*earliest[1:])

 运行结果: 

错误解析:

        这种解法属于第二题看到题直白写就好,  由于70% 的测试数据满足:顿顿无法在 n 天内完成全部 m 项科目的训练,此时不需要考虑最晚开始时间是否输出的问题,这是不符题意的,但也有70分入手。 

pyhon满分题解: 

n, m = map(int,input().split())p = [0]+[i for i in map(int,input().split())]t = [0]+[i for i in map(int,input().split())]earliest = [0 for _ in range(m+1)]latest = [0 for _ in range(m+1)]mark = 1# 将每个科目的最早时间确定for i in range(1,m+1): if p[i]==0: earliest[i] = 1 else: earliest[i] = earliest[p[i]]+t[p[i]] # 判断所有科目最早开始的情况是否可以完成所有科目 if earliest[i]+t[i]-1>n: mark = 0# 输出每项科目的最早开始时间print(*earliest[1:])# 判断是否可以完成项目if mark==1: # 将确定每个科目的最晚,从最后的科目往前推,需要把依赖该科目的科目所消耗时间算上 for i in range(m, 0, -1): temp = 366 for j in range(i+1, m+1): #寻找是否有依赖该科目的科目 if p[j] == i: temp = min(temp, latest[j]) #如果没有被依赖,那么最晚开始时间 = 最后期限 - 持续时间的时刻 if temp == 366: latest[i] = n-t[i]+1 #如果有被依赖,那么最晚开始时间 = 依赖它的科目的最晚开始的时刻最小的科目 - 本身的持续时间的时刻 else: latest[i] = temp-t[i] # 输出每项科目的最早开始时间 print(*latest[1:])

 运行结果: 

思路解析:

        在最早开始时间的计算中,每一个科目的最早开始时间依赖于它的前继科目;

        而在最晚开始时间的计算中,由于某科目是被别的科目依赖的,所以计算它的最晚开始时间时要考虑依赖它的科目能否如期完成,所以我们做个标记 mark ,如果最早可以完成,则继续分析最晚开始时间;

        而将确定每个科目的最晚,需要从最后的科目往前推,因为如果有依赖的科目,需要把依赖该科目的科目所消耗时间算上,如果没有被依赖,那么最晚开始时间 = 最后期限 - 持续时间的时刻,如果有被依赖,那么最晚开始时间 = 依赖它的科目的最晚开始的时刻最小的科目 - 本身的持续时间的时刻。

c++满分题解:

#include<iostream>#include<cmath>using namespace std;const int N = 101;int n, m;int p[N], t[N];int earliest[N], latest[N];int main() { int mark = 1; cin >> n >> m; for (int i = 1; i <= m; i++) cin >> p[i]; for (int i = 1; i <= m; i++) cin >> t[i]; // 将每个科目的最早时间确定 for (int i = 1; i <= m; i++) { if (p[i] == 0) earliest[i] = 1; else earliest[i] = earliest[p[i]] + t[p[i]]; // 判断所有科目最早开始的情况是否可以完成所有科目 if (earliest[i] + t[i] - 1 > n) mark = 0; } // 输出每项科目的最早开始时间 for (int i = 1; i <= m; i++) cout << earliest[i] << " "; cout << endl; // 判断是否可以完成项目 if (mark == 1) { // 将确定每个科目的最晚,从最后的科目往前推,需要把依赖该科目的科目所消耗时间算上 for (int i = m; i >= 1; i--) { int temp = 366; for (int j = i + 1; j <= m; j++) { // 寻找是否有依赖该科目的科目 if (p[j] == i) temp = min(temp, latest[j]); } // 如果没有被依赖,那么最晚开始时间 = 最后期限 - 持续时间的时刻 if (temp == 366) latest[i] = n - t[i] + 1; // 如果有被依赖,那么最晚开始时间 = 依赖它的科目的最晚开始的时刻最小的科目 - 本身的持续时间的时刻 else latest[i] = temp - t[i]; } // 输出每项科目的最晚开始时间 for (int i = 1; i <= m; i++) cout << latest[i] << " "; } return 0;}

 运行结果: 

本文链接地址:https://www.jiuchutong.com/zhishi/299666.html 转载请保留说明!

上一篇:【计算机视觉】图像增强——图像的形态学操作(计算机视觉的未来发展方向有哪些)

下一篇:京东手机APP抢购茅台秒杀脚本(手机用)(安卓京东抢购)

  • 浅析发帖推广是怎么样在论坛上推广的(帖子发布推广)

    浅析发帖推广是怎么样在论坛上推广的(帖子发布推广)

  • honor耳机怎么连接手机(honor耳机怎么连接手机配对)

    honor耳机怎么连接手机(honor耳机怎么连接手机配对)

  • 苹果怎么设置主题桌面图标(苹果怎么设置主题风格)

    苹果怎么设置主题桌面图标(苹果怎么设置主题风格)

  • 拼多多的评论如何删除(拼多多的评论如何置顶)

    拼多多的评论如何删除(拼多多的评论如何置顶)

  • 怎么在微信上查看原图(怎么在微信上查看自己的银行卡号)

    怎么在微信上查看原图(怎么在微信上查看自己的银行卡号)

  • 微信扫码怎么改成后置摄像头(微信扫码怎么改成零钱支付)

    微信扫码怎么改成后置摄像头(微信扫码怎么改成零钱支付)

  • 手机右上角出现n什么意思(手机右上角出现电话打叉是什么意思)

    手机右上角出现n什么意思(手机右上角出现电话打叉是什么意思)

  • iphone11要不要更新13.5

    iphone11要不要更新13.5

  • Excel表格怎样添加表格的行和列(excel表格怎样添加边框)

    Excel表格怎样添加表格的行和列(excel表格怎样添加边框)

  • 快手能在电脑上使用吗(快手能在电脑上登录吗)

    快手能在电脑上使用吗(快手能在电脑上登录吗)

  • 魅族17是曲面屏吗(魅族17pro是曲面屏)

    魅族17是曲面屏吗(魅族17pro是曲面屏)

  • 二级密码忘记了怎么办(二级密码忘记了咋办)

    二级密码忘记了怎么办(二级密码忘记了咋办)

  • 哔哩哔哩怎么加好友(哔哩哔哩怎么加字幕)

    哔哩哔哩怎么加好友(哔哩哔哩怎么加字幕)

  • 苹果x突然黑屏但没有关机(苹果x突然黑屏但有声音怎么回事)

    苹果x突然黑屏但没有关机(苹果x突然黑屏但有声音怎么回事)

  • 手机照片删不了怎么回事(苹果手机照片删不了)

    手机照片删不了怎么回事(苹果手机照片删不了)

  • 爱奇艺pc端是电视机上的吗(爱奇艺pc端是电视剧吗)

    爱奇艺pc端是电视机上的吗(爱奇艺pc端是电视剧吗)

  • pbatoo是什么型号手机(pbamoo是什么手机型号)

    pbatoo是什么型号手机(pbamoo是什么手机型号)

  • 小米note3外屏能单换吗(小米note3内外屏幕多少钱)

    小米note3外屏能单换吗(小米note3内外屏幕多少钱)

  • 快手关注怎样超过1500(快手关注量已达到上限 怎么扩大关注量)

    快手关注怎样超过1500(快手关注量已达到上限 怎么扩大关注量)

  • 淘宝预付定金怎么退款(淘宝预付定金怎么付尾款)

    淘宝预付定金怎么退款(淘宝预付定金怎么付尾款)

  • 微信3万步等于多少公里(微信三万步是多少米)

    微信3万步等于多少公里(微信三万步是多少米)

  • ios超级签名是什么(苹果超级签名和普通签名)

    ios超级签名是什么(苹果超级签名和普通签名)

  • ios gm版本是什么意思(苹果gm版本是什么意思)

    ios gm版本是什么意思(苹果gm版本是什么意思)

  • 为什么看不到朋友的微信运动(为什么看不到朋友的微信运动步数)

    为什么看不到朋友的微信运动(为什么看不到朋友的微信运动步数)

  • cad怎么重生成(cad怎么重生成模型命令)

    cad怎么重生成(cad怎么重生成模型命令)

  • 滴滴叫车怎么叫(滴滴叫车怎么叫面包车)

    滴滴叫车怎么叫(滴滴叫车怎么叫面包车)

  • 如何缩小图片内存(如何缩小图片内存不改变清晰度)

    如何缩小图片内存(如何缩小图片内存不改变清晰度)

  • Word跨页表格自动在每页首行添加表头(word表格跨页设置)

    Word跨页表格自动在每页首行添加表头(word表格跨页设置)

  • 手把手教你基于HTML、CSS搭建我的相册(下)(基于什么意思)

    手把手教你基于HTML、CSS搭建我的相册(下)(基于什么意思)

  • 资源税的计税依据含增值税吗
  • 本期收入和本期减除费用
  • 保险公司代收车船税会计分录
  • 房地产行业企业所得税政策
  • 包装纸箱属于原材料吗
  • 购买不良资产交印花税吗
  • 利润总额和净利润相同说明什么
  • 发票没有写纳税人识别号可以吗
  • 凭证审核签字操作只能
  • 存货验收入库会计分录
  • 付款单是发票吗
  • 机构账户炒股是卖出后缴税么
  • 生产企业原材料的订购与运输论文
  • 公司搞活动的话术
  • 税务征收与管理
  • 处置交易性金融资产发生的交易费用
  • 公司没有缴纳住房公积金离职能要求补缴吗
  • 单位向个人购买材料没有发票
  • 营业执照里承办什么业务
  • 对公提回款是什么意思
  • 许可费怎么进行分类
  • 劳务外包公司代发工资能正常发吗
  • 坏账准备的转回对资产的影响
  • bois如何设置启动项
  • 北大新闻传播学院副院长
  • 电脑不支持cpu
  • 微软正式宣布收购动视暴雪
  • 法人治理包括哪些方面
  • 中途建账科目余额表怎么建
  • 押金收不回的会计分录
  • 库存商品的主要类型
  • linux的系统配置文件
  • vue项目中技巧知识点
  • js解耦
  • anjedi编辑器
  • tensorboard作用
  • 目标检测论文解析怎么写
  • 企业有外币账户怎样做账
  • 辞退福利记入什么费用
  • phpcms 1064错误的解决办法
  • 无偿受让股权是利好吗
  • 企业亏损了
  • mysql同步复制搭建方法指南详细步骤
  • 建筑公司收到劳务发票会计分录
  • 其他综合收益的税后净额怎么计算
  • 金税四期对建筑行业有什么影
  • 建筑业挂靠企业所得税如何收取?
  • 股权转让如何计算股权原值
  • 计提附加税金额
  • 税务局代开的增值税专票可以红冲吗?
  • 购进材料无发票会计分录
  • 在建工程前期费用明细
  • 本月没有销售怎么做账
  • 企业向个人借款利息如何缴纳增值税
  • 启动sqlserver服务的命令
  • 出现错误,请联系客服
  • winxp设置在哪
  • window10 uwp
  • ubuntu20.10
  • 如何激活Win8.1
  • mac怎么恢复出厂设置
  • linux中安装jdk1.8
  • 为大家详细介绍英语
  • regloadr.exe - regloadr是什么进程 有什么用
  • Linux history命令的几个使用小技巧
  • win7屏幕刷新率怎么调高
  • 微信小程序页面滚动
  • extjs DataReader、JsonReader、XmlReader的构造方法
  • 将list转换为json字符串
  • 那些年的我们什么意思
  • python pyb库
  • js函数调用常用字符串
  • javascript核心技术
  • javascript基于什么的语言
  • js访问thymeleaf值
  • jquery插件库怎么导入
  • 怎么打印纳税申报表带章的
  • 安徽省地方税务局刘利庆
  • 动态简报和工作总结
  • 企业所得税年报职工薪酬纳税调整明细表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设