CCF-CSP真题《202203-2—出行计划》思路+python满分题解

2023-11-02 23:20

本文主要是介绍CCF-CSP真题《202203-2—出行计划》思路+python满分题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

试题编号:202203-2
试题名称:出行计划
时间限制:1.5s
内存限制:512.0MB
问题描述:

问题描述

最近西西艾弗岛上出入各个场所都要持有一定时限内的核酸检测阴性证明。

具体来时,如果在 t 时刻做了核酸检测,则经过一段时间后可以得到核酸检测阴性证明。这里我们假定等待核酸检测结果需要 k 个单位时间,即在 t+k 时刻可以获得结果。如果一个场所要求持 24 个单位时间内核酸检测结果入内,那么凭上述的核酸检测结果,可以在第 t+k 时刻到第 t+k+23 时刻进入该场所。

小 C 按时间顺序列出接下来的 n 项出行计划,其中第 i 项(1≤i≤n)可以概括为:
ti 时刻进入某场所,该场所需持有 ci 个单位时间内的核酸检测结果入内,其中 0<ci≤2×105。

为了合理安排核酸检测时间,试根据小 C 的出行计划,回答如下查询:

  • 如果在 q 时刻做了核酸检测,有多少项出行计划的核酸检测要求可以得到满足?

这样的查询共有 m 个,分别为 q1,q2,⋯,qm;查询之间互不影响。

输入格式

输入的第一行包含空格分隔的三个正整数 n、m 和 k,分别表示出行计划数目、查询个数以及等待核酸检测结果所需时间。

接下来输入 n 行,其中每行包含用空格分隔的两个正整数 ti、ci,表示一项出行计划;出行计划按时间顺序给出,满足 0<t1≤t2≤⋯≤tn≤2×105。

最后输入 m 行,每行仅包含一个正整数 qi,表示一个查询。m 个查询亦按照时间顺序给出,满足 0<q1<q2<⋯<qm≤2×105。

输出格式

输出共 m 行,每行一个整数,表示对应查询的答案。

样例输入

6 2 10
5 24
10 24
11 24
34 24
35 24
35 48
1
2

样例输出

3
3

样例解释

时刻 1 做检测,可以满足第三、四、六项出行计划;

时刻 2 做检测,可以满足第四、五、六项出行计划。

子任务

40% 的测试数据满足 0<n,k≤1000、m=1;

70% 的测试数据满足 0<n,m,k≤1000;

全部的测试数据满足 0<n,m,k≤105。

真题来源:出行计划

 感兴趣的同学可以进去进行练习提交

70分题解:

n, m, k = map(int,input().split())
spots = [[i for i in map(int, input().split())] for j in range(n)]
times = []
for i in range(m):point = int(input())times.append(point+k)
for time in times:num = 0temp = sorted(spots,key = lambda x:(x[1]-time-x[0]),reverse = True)for spot in temp:if spot[0] < time:continueif time <= spot[0] < time+spot[1]:num += 1      if spot[0] >= time+spot[1]:break print(num)

解题思路: 

        70分代码的思路我们是站在人(小C)的角度处理问题,即按照他的思路(即题目要求)一步一步处理问题,优先解决人的需求;

        在代码中,运行时间过长的原因在于双重循环;
        仔细思考后发现:在外层循环中,time是按照时间顺序给出,则存在重复判断的情况,例如,无论time=11还是time=12,第五组数据35 24都不符合要求,但是在70分程序中该情况盘端了两次,导致重复;我们接下来只需要将这部分重复判断的操作去除,将两层循环改成一层循环即可;

运行结果: 


满分题解: 

n, m, k = map(int,input().split())
spots = [[i for i in map(int, input().split())] for j in range(n)]
num = 0
for i in range(n):if num < spots[i][0]:num = spots[i][0]+1spots[i][0], spots[i][1] = max(1,spots[i][0]-spots[i][1]+1), spots[i][0]
times = []
for i in range(m):point = int(input())times.append(point+k)
temp = [0 for i in range(num*2)]
for spot in spots:temp[spot[0]] += 1temp[spot[1]+1] -= 1
for i in range(1,num+1):temp[i] += temp[i-1]
for time in times:print(temp[time])

解题思路:

        在满分的解题思路中,我们优先处理场所需求,即判断出进入该场所需要的最早时间核酸报告和最晚时间核酸报告;然后再考虑人的需求,即人在核酸适合进场这个时间范围内进入场所都是符合要求的,可将问题转化为对区间的处理:核酸检测的时间t+等待核酸检测的时间k所在的点有多少个满足条件的场所;
        此100分代码考虑差分算法,差分数组适合于多次区间修改,极少区间查询或者先区间修改再区间查询,不是边修改边查询的情况。本题使用差分数组,每个出行计划就是对有效区间的操作。最后前缀和统计一下,随后查询即可。

运行结果:  

这篇关于CCF-CSP真题《202203-2—出行计划》思路+python满分题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.