CCF CSP认证 历年题目自练Day34

news/2024/5/6 6:14:54/文章来源:https://blog.csdn.net/m0_63216005/article/details/133875991

题目一

试题编号: 202303-1
试题名称: 田地丈量
时间限制: 1.0s
内存限制: 512.0MB
问题描述:
问题描述
西西艾弗岛上散落着 n 块田地。每块田地可视为平面直角坐标系下的一块矩形区域,由左下角坐标 (x1,y1) 和右上角坐标 (x2,y2) 唯一确定,且满足 x1<x2、y1<y2。这 n 块田地中,任意两块的交集面积均为 0,仅边界处可能有所重叠。

最近,顿顿想要在南山脚下开垦出一块面积为 a×b 矩形田地,其左下角坐标为 (0,0)、右上角坐标为 (a,b)。试计算顿顿选定区域内已经存在的田地面积。

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

输入共 n+1 行。

输入的第一行包含空格分隔的三个正整数 n、a 和 b,分别表示西西艾弗岛上田地块数和顿顿选定区域的右上角坐标。

接下来 n 行,每行包含空格分隔的四个整数 x1、y1、x2 和 y2,表示一块田地的位置。

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

输出一个整数,表示顿顿选定区域内的田地面积。

样例输入
4 10 10
0 0 5 5
5 -2 15 3
8 8 15 15
-2 10 3 15
Data

样例输出
44
Data

样例解释
如图所示,选定区域内田地(绿色区域)面积为 44。
在这里插入图片描述
子任务
全部的测试数据满足 n≤100,且所有输入坐标的绝对值均不超过 104。

题目分析(个人理解)

  1. 还是先看输入,第一行输入n个田地,a,b是想要开垦的田地的右上角坐标(x2,y2),左下角坐标是(x1=0,x2=0)后面的n行输入每一块已经开垦好的田地的左下角坐标和右上角坐标,现在要求重复的面积。

  2. 我选择二维列表l[]存储每块田地的坐标,如何判断重叠部分是整个问题的核心,对于超过边界的情况有如下几种情况:黄色是要开垦的土地,蓝色是已经开垦过的土地。
    在这里插入图片描述

  3. 我们可以这样理解求重叠部分面积就是重叠部分的长乘宽,如何确定?不难发现,长就是x2与a取最小值减去x1与0取最大值。宽就是y2与b取最小值减去x2与0取最大值。在判断如果长和宽都大于0相乘即可,然后遍历所有蓝色矩形再相加就完事了。

  4. 上代码!!!

n, a, b = map(int, input().split())
l = [[i for i in map(int, input().split())] for j in range(n)]#列表推导式创建二维列表
sum = 0#计算总重合面积
for i in range(n):x = min(a, l[i][2])-max(0, l[i][0])y = min(b, l[i][3])-max(0, l[i][1])if x>=0 and y>=0:sum += x*y
print(sum)

题目二

试题编号: 202303-2
试题名称: 垦田计划
时间限制: 1.0s
内存限制: 512.0MB
问题描述:
问题描述
顿顿总共选中了 n 块区域准备开垦田地,由于各块区域大小不一,开垦所需时间也不尽相同。据估算,其中第 i 块(1≤i≤n)区域的开垦耗时为 ti 天。这 n 块区域可以同时开垦,所以总耗时 tTotal 取决于耗时最长的区域,即:tTotal=max{t1,t2,⋯,tn}

为了加快开垦进度,顿顿准备在部分区域投入额外资源来缩短开垦时间。具体来说:

在第 i 块区域每投入 ci 单位资源,便可将其开垦耗时缩短 1 天;

耗时缩短天数以整数记,即第 i 块区域投入资源数量必须是 ci 的整数倍;

在第 i 块区域最多可投入 ci×(ti−k) 单位资源,将其开垦耗时缩短为 k 天;

这里的 k 表示开垦一块区域的最少天数,满足 0<k≤min{t1,t2,⋯,tn};换言之,如果无限制地投入资源,所有区域都可以用 k 天完成开垦。

现在顿顿手中共有 m 单位资源可供使用,试计算开垦 n 块区域最少需要多少天?

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

输入共 n+1 行。

输入的第一行包含空格分隔的三个正整数 n、m 和 k,分别表示待开垦的区域总数、顿顿手上的资源数量和每块区域的最少开垦天数。

接下来 n 行,每行包含空格分隔的两个正整数 ti 和 ci,分别表示第 i 块区域开垦耗时和将耗时缩短 1 天所需资源数量。

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

输出一个整数,表示开垦 n 块区域的最少耗时。

样例输入1
4 9 2
6 1
5 1
6 2
7 1

样例输出1
5

样例解释
如下表所示,投入 5 单位资源即可将总耗时缩短至 5 天。此时顿顿手中还剩余 4 单位资源,但无论如何安排,也无法使总耗时进一步缩短。

i 基础耗时 ti 缩减 1 天所需资源 ci 投入资源数量 实际耗时
1 6 1 1 5
2 5 1 0 5
3 6 2 2 5
4 7 1 2 5
样例输入2
4 30 2
6 1
5 1
6 2
7 1

样例输出2
2

样例解释
投入 20 单位资源,恰好可将所有区域开垦耗时均缩短为 k=2 天;受限于 k,剩余的 10 单位资源无法使耗时进一步缩短。

子任务
70% 的测试数据满足:0<n,ti,ci≤100 且 0<m≤106;

全部的测试数据满足:0<n,ti,ci≤105 且 0<m≤109。

题目分析(个人理解)

  1. 题目还是比较好理解的,两种样例分别给出了不同的用资源之后的情况。
  2. 还是常规,先看输入,第一行输入n个田地,m个资源,k表示开垦一块地的最小天数。后面的n行输入每一块田地的耗时(不使用资源的情况下需要的天数)和使用资源的最小单位,使用一个最小单位只能减少一天。
  3. 我选择列表存储,
    t = []#在不投入资源的情况下的耗时
    c = []#资源的最小单位
    列表的位序表示第几块地(也就是从1开始)每一行追加写入即可(.append()方法)。
  4. 之后到核心部分,如何找到在资源用完的情况下开垦完所有的田地的天数。我是这样想的,在第day天能完成所有田地的开垦,那么需要消耗多少资源?如果消耗的资源大于拥有的资源m那么就查找第day+1需要的资源(资源不够又要完成所有土地的开垦,只能牺牲时间)。如果在第day天需要的资源小于拥有的资源m那么就用资源换时间,去找day-1天需要的资源。
  5. 如何计算第day天完成需要的资源?自定义函数用来计算需要的资源,如果当前天数day(函数的参数)大于t[i]说明不用资源都开垦完了,反之当前天数day小于t[i]说明需要用资源来填补。用计数器totalM统计需要多少资源,那么totalM += (t[i] - day) * c[i]#资源的使用的最小单位是c[i],需要补t[i]-day天。
  6. OK,现在将在第day天完成需要的资源全部知道了,下面采用二分查找算法(数据结构内容),找到满足题目条件的天数。
  7. 二分查找算法:
    原理:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
  8. 对于这道题,先找到最小天数,也就是k,最大天数为t[]中的最大值,先计算天数为(L+R)/2时,需要消耗的资源totalM;如果消耗资源超过拥有资源,只能增加天数,减少资源消耗。反之如果消耗资源未超过拥有资源,消耗资源少了,还可以减少天数,消耗更多的资源。
  9. 上代码!!!
def judge(t,c,n,m,mid):zong=0for i in range(n):if t[i]>mid:zong+=(t[i]-mid)*c[i]if zong<=m:return Trueelse:return Falsen,m,k=map(int,input().split())
#待开垦的区域总数、顿顿手上的资源数量,每块区域的最少开垦天数
t=[]
c=[]
aa=0
for i in range(n):a,b=map(int,input().split())t.append(a)c.append(b)aa+=(a-k)*b
#print(t,c)
if aa<=m:print(k)
else:#二分l=kr=max(t)mid=0while(l<=r):mid=int((l+r)/2)if judge(t,c,n,m,mid):r=mid-1else:l=mid+1print(l)

总结

忙而不乱,不骄不躁。--------shagzhaoyun 2023.10.17

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

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

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

相关文章

spark获取hadoop服务token

spark 作业一直卡在accepted 问题现象问题排查1.查看yarn app日志2.问题分析与原因 问题现象 通过yarn-cluster模式提交spark作业&#xff0c;客户端日志一直卡在submit app&#xff0c;没有运行 问题排查 1.查看yarn app日志 appid已生成&#xff0c;通过yarn查看app状态为…

“传统”开发与AI开发的区别与联系(更新了GPT3.5的反馈)

1、传统开发的算法和软件整体&#xff0c;也可以看成是一个“大模型”&#xff0c;其中有不同层次的处理&#xff0c;最终能够完成从输入到输出的计算&#xff0c;不过&#xff0c;其中的计算都是人工定义的&#xff0c;一般依赖于研究成果的应用。研究成果在实际中的应用处理。…

linux性能分析(一)如何查看网络的性能指标

一 如何查看网络的性能指标 说明&#xff1a; 以下案例中的相关命令只是粗略讲解,后续会有针对性的细讲补充&#xff1a; 各个案例通过不同维度衡量网络的性能指标 ① 如何进行性能分析 思考&#xff1a;如何进行性能分析?1、前提&#xff1a;一定是系统出现不符合预期的…

SpringCloud 完整版--(Spring Cloud Netflix 体系)

目录 SpringCloudSpring Cloud Netflix 体系分布式概念&#xff1a;分析图单体应用分布式架构集群微服务分布式微服务集群 服务注册与发现Eureka作用&#xff1a;为什么使用Eureka&#xff1f;解答&#xff1a;分析图 搭建&#xff1a;1、注册中心Eureka-server搭建创建项目配置…

初出茅庐的小李博客之Windows11运行Linux记录

安装教程 超简单&#xff0c;不安装虚拟机&#xff0c;Windows11运行Linuxhttps://zhuanlan.zhihu.com/p/393484912 注意事项 出现错误有可能是少了驱动 驱动下载地址 https://link.zhihu.com/?targethttps%3A//wslstorestorage.blob.core.windows.net/wslblob/wsl_updat…

电子技术基础之一(电容和电感)

Electronic Techonolgy 1、电容和电感1.1、电容(Capacitor)1.1.1、滤波功能1.1.2、储能功能 1.2、电感(Inductor)1.2.1、楞次定律1.2.2、储能作用 1、电容和电感 先讲一个概念&#xff0c;电流分为直流电和交流电&#xff0c;其中直流电再分为稳定直流电和脉动直流电。 直流电…

Softing为连接PROFIBUS网络提供多种接口产品方案

一 应用广泛的PROFIBUS网络 PROFIBUS是基于统一、标准且独立于应用的通信协议。据PI-China统计&#xff0c;在工业领域里早已有近5090万个PROFIBUS设备被安装在了超过900万节点中。PROFIBUS网络的广泛应用得益于PROFIBUS协议的开放性——用户可以很方便地在PROFIBUS网络的任意…

Redis在分布式场景下的应用

分布式缓存 缓存的基本作用是在高并发场景下对应服务的保护缓冲 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; redis由于高强度性能采用内存 但是意味着丢失的风险单结点redis并发能力有限分布式服务中数据过多 依赖内存的redis 明显单机不…

JavaSE编程题目练习(三)

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;欢迎关注小弟&#xff01; 博主小留言&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟Cool&#xff0…

超低延迟直播技术路线,h265的无奈选择

超低延迟&#xff0c;多窗显示&#xff0c;自适应编解码和渲染&#xff0c;高分辨低码率&#xff0c;还有微信小程序的标配&#xff0c;这些在现今的监控和直播中都成刚需了&#xff0c;中国的音视频技术人面临着困境&#xff0c;核心门户浏览器不掌握在自己手上&#xff0c;老…

前言:自动化框架的设计模式

1、UI自动化框架的设计模式 自动化测试框架有很多种&#xff0c;常见的自动化框架分类如下&#xff1a; 在使用上面的自动化框架时&#xff0c;通常会结合使用分层思想&#xff0c;也就是一些自动化框架设计模式&#xff0c;今天重点分享一下UI自动化框架设计使用比较多的一种…

2023/10/30-LED灯驱动开发

k1.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" char kbuf[128] {}; unsigned int major; //定义三个指针指向映射后的虚拟内…

STM32:TIM通道输入捕获

本文主要讲解如何使用TIMER通道的输入脉冲捕获功能。基于STM32F7的Timer2 Channel3来进行讲解。 配置时钟 Timer2的时钟频率&#xff0c;对应APB1 Timer。 分频设置为96-1&#xff0c;这样设置每次count计数&#xff0c;对应的时间为1us。Counter设置为最大即可&#xff0c;默…

VMware Workstation里面安装ubuntu20.04的流程

文章目录 前言一、获取 desktop ubuntu20.04 安装镜像二、VMware Workstation下安装ubuntu20.041. VMware Workstation 创建一个新的虚拟机2. ubuntu20.04的安装过程3. 登录ubuntu20.044. 移除 ubuntu20.04 安装镜像总结参考资料前言 本文主要介绍如何在PC上的虚拟机(VMware W…

使用Spyder进行动态网页爬取:实战指南

导语 知乎数据的攀爬价值在于获取用户观点、知识和需求&#xff0c;进行市场调查、用户画像分析&#xff0c;以及发现热门话题和可能的新兴领域。同时&#xff0c;知乎上的问题并回答也是宝贵的学习资源&#xff0c;用于知识图谱构建和自然语言处理研究。爬取知乎数据为决策和…

SolidWorks2021 安装教程(亲测可用)

1.安装教程&#xff1a;&#xff08;断网进行&#xff0c;否则安装了后还是无法用&#xff09; 1.运行sw2021_network_serials_licensing 2. 注册表编辑器确定 3.成功添加到注册表中 4.复制SolidWorks_Flexnet_Server文件夹 5.运行SolidWorks_Flexnet_Server下的lserver_insta…

测试Android webview 加载本地html

最近开发一个需要未联网功能的App, 不熟悉使用Java原生开发界面&#xff0c;于是想使用本地H5做界面&#xff0c;本文测试了使用本地html加载远程数据。直接上代码&#xff1a; MainActivity.java package com.alex.webviewlocal;import androidx.appcompat.app.AppCompatAct…

UE4 UltrDynamicSky与场景物体进行交互

找到材质 找到其最父类的材质 把这个拖过去连上即可

OSI笔记

由7层组成&#xff0c;由下自上分别为&#xff1a; 物理层&#xff08;硬件方面&#xff0c;例如物理网络设备、布线电缆、光纤等&#xff09;&#xff0c; 传输数据主要是比特流0 1 、电信号数据链路层&#xff08;确定了0 1 的分组方式&#xff0c;通过广播的方式&#xff0…

VTK8.0.0编译+QT5.9.2+VS2017

背景 VTK网上资料较多并且使用较多的版本可能是VTK8.2.0&#xff0c;但是由于之前先配置了QT 5.9.2 msvc2017 PCL1.8.1 VTK8.0.0环境&#xff0c;听说有人PCL1.8.1配置VTK8.2.0实测版本不兼容&#xff0c;需修改源码调试&#xff0c;比较麻烦&#xff0c;所以之前就使用的VT…