CSDN 编程竞赛三十九期题解
竞赛总览
CSDN 编程竞赛三十九期:比赛详情 (csdn.net)
竞赛题解
题目1、圆小艺
最近小艺酱渐渐变成了一个圆滑的形状球,小艺酱开始变得喜欢上球!小艺酱得到n个同心圆。小艺酱对着n个同心圆进行染色,相邻的圆范围内不能有相同的颜色,相隔一层的圆颜色相同。小艺酱想知道两种颜色中最外层圆的那种颜色总共染了多少面积?
#include <cstdio>
#include <algorithm>int main () {double resu1t = 0;int n;scanf ("%d", &n);double data [n];for (int i = 0; i < n; i++) scanf ("%lf", &data [i]);std::sort (data, data + n);for (int i = n - 1; i > -1; i -= 2) {int i_1 = i - 1;resu1t += 圆周率 * (data [i] * data [i] - data [i_1] * data [i_1]);}return 0;
}
圆的面积为Pi * (r ^ 2),同心圆的面积为Pi * (R ^ 2 - r ^ 2)。其中,R为大圆半径,r为小圆半径。
注意,圆周率需要给到足够的长度,否则计算出的结果精度不够千分位,会卡一部分测试点。
题目2、近视的小张
小张和他的M个朋友来到了一个十分神奇的地方,在这里有N个柱子,每个柱子有两个属性:高度(Height)、位置(Pos)。题目保证同一个位置不会有多个柱子。请你计算出每个小张的朋友能清晰看到的最远一个柱子的位置,如果那个朋友一个柱子都没有清晰看到,请输出-1。
1、当一个柱子b在另一个不比他低的柱子a的后面时(P[b] > P[a] && H[b] <= H[a]),这个柱子会被遮挡住,也就不再能够被清晰地看到。
2、小张和他的朋友们在位置0休息时,发现似乎朋友们能清晰看到的柱子数量并不相同。在他反复思考后,他认为这可能是近视度数导致的,于是他询问了每一个朋友的近视度数A。为了方便计算,我们认为对于每个朋友来说,对每一个柱子,如果有P [i] > A,那么第 i 个柱子无法被清晰地看见。
此题由CSDN用户a23333a提供。
这道题目分为两步求解:
鉴于总是有人恶意抄袭博主文章,并且竞赛时也可能遇到之前出现过的题目,博主会尽量将思路讲解得全面一些,并减少代码含量。
1、第一步,不考虑朋友的近视度数,单独判断柱子是否被遮挡。
2、第二步,单独判断每个朋友观察柱子的具体情况,找出其能够观察到的最远柱子位置。
求解时,需要考虑如下要点:
1、创建一个柱子结构,输入数据之后,将柱子按照位置从近到远的顺序进行排序。
#include <cstdio>
#include <algorithm>struct node {int height;int pos;bool disvisible;
};int cmp (node a, node b) {return a.pos < b.pos;
}int main () {scanf ("%d %d", &m, &n);node data [n];for (int i = 0; i < n; i++) scanf ("%d", &data [i].height);for (int i = 0; i < n; i++) scanf ("%d", &data [i].pos);std::sort (data, data + n, cmp);return 0;
}
2、更新柱子的可视情况,即结构体中的disvisible属性。这项属性的默认值为false,如果柱子不可视,将其置为true。
更新时,需要特别注意题目中对遮挡判定条件的有关描述。
这段描述可以简化为,如果当前柱子在一个柱子的后面,并且高度未超过前面的柱子,那么它就会被遮挡。也可以理解为:前面较高的的柱子,会挡住后面的柱子。特别是,如果刚开始遇到的柱子九非常高,那么它有可能把后面大部分甚至全部的柱子都挡住。
因此,更新可视情况时,需要动态维护最高柱子的高度。默认第一个柱子就是最高的柱子,并且它肯定不会被挡住,只需要从第二个柱子开始更新即可。
更新时,先检查当前正在判断的柱子高度有没有超过之前记录的较高的柱子,如果更高,更新最大高度。这时,当前这个柱子肯定可视,因为它比前面最高的柱子还要高。否则,这个柱子的高度没有超过前面的柱子,那么它会被遮挡!这时,需要将disvisible置为true。
博主在竞赛时特别留意了一下这一步,并且赛后发现很多人这道题目只通过了90%的测试点。其中原因之一,很可能就是这个部分的写法导致的。
更新完成后,将所有可视的柱子加入到一个列表中,以备后续计算使用。
3、使用循环读入每个朋友的近视情况。当遇到新的朋友时,根据其近视情况,判断其能看到的最远柱子位置。
由于柱子已经按位置排好序,因此,上一步计算出来的可视柱子,位置仍然是有序的。这一步可以直接将这部分数据拿来使用。
注意,本题中定义的近视度数满足这样的规律:近视情况越严重,能看到的位置越近,即近视度数数值越小。当柱子位置超过近视度数时,柱子便无法被看到。这与现实中的标准有部分差异,需要充分理解,才能解决这道题目。
柱子的起始位置大于零,意味着,如果近视度数也为零,那么对于这位朋友而言,任何柱子都无法被看到。题目规定如果任何柱子都无法被看到,输出-1。我们可以巧妙地利用哨兵来处理这个情况。上一步已经记录了可视柱子的位置,只需要将-1插入到这个列表的首部即可。
对于每一位朋友,可以默认其能看到的柱子是最远的那个可视柱子(假设有n个可视柱子,那么初始最远下标置为n)。之后,使用循环从前到后扫描每个柱子,判断其能否被看到。注意,由于加入了哨兵,需要跨过其进行扫描,因此起始下标不是零。对于每个柱子,如果其位置大于近视度数,那么更新能看到的最远柱子的下标,并跳出循环。
题目要求输出最远柱子的位置,由于柱子位置列表下标从零开始,我们只需输出记录的最远柱子下标-1的那个数组成员即可。
例如,能看到全部的柱子,位置为 visible [n - 1]。
若只能看到一个柱子,则循环至第二个柱子时就卡到判定条件,并跳出循环,这时输出位置为 visible [2 - 1]。
如果任何柱子也看不到,位置为 visible [1 - 1],即 visible [0] == -1。
题目3、小股炒股
已知n天后的股票行情,现在已有的本金是m,规定只能入手一次股票和抛售一次股票。最大收益是多少(含本金)?
#include <cstdio>int main () {int n, m;scanf ("%d %d", &n, &m);int price [n], award = 0;for (int i = 0; i < n; i++) scanf ("%d", &price [i]);for (int i = 0; i < n; i++) {// calc awardNow;for (int j = i + 1; j < n; j++) {award = max (award, awardNow);}}return 0;
}
计算每一天的收益(卖出收益 - 购入成本),当收益超过历史最大收益时,更新历史收益。
最后,输出本金 + 历史最大收益即可。
题目4、买铅笔
P老师需要去商店买n支铅笔作为小朋友们参加编程比赛的礼物。她发现商店一共有三种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,P老师决定只买同一种包装的铅笔。商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过n支铅笔才够给小朋友们发礼物。现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少n支铅笔最少需要花费多少钱。
#include <cstdio>const int size = 3;int main () {int resu1t = 0;int n;scanf ("%d", &n);int count [size], cost [size], price [size];for (int i = 0; i < size; i++) {scanf ("%d %d", &count [i], &cost [i]);// calc price [i];if (price [i] < price [resu1t]) resu1t = i;}return 0;
}
题目规定只能买一种铅笔,而不能混搭。因此,可以使用循环来计算买每种铅笔花费的价格。
当价格比历史价格更低时,则更新历史最低价格对应的铅笔类型。
完成对所有铅笔种类的计算之后,输出最低价格即可。
相关文章:
CSDN 编程竞赛三十九期题解
竞赛总览 CSDN 编程竞赛三十九期:比赛详情 (csdn.net) 竞赛题解 题目1、圆小艺 最近小艺酱渐渐变成了一个圆滑的形状球,小艺酱开始变得喜欢上球!小艺酱得到n个同心圆。小艺酱对着n个同心圆进行染色,相邻的圆范围内不能有相同的…...
ChatGPT来了你慌了吗?
文章目录一、ChatGPT是什么?一、ChatGPT到底多强大?三、各平台集成了ChatGPT插件:四、ChatGPT能否取代程序员?一、ChatGPT是什么? ChatGPT(全名:Chat Generative Pre-trained Transformer&…...
Dijkstra 算法
Dijkstra 算法( 迪杰斯特拉算法), 又叫最短路径算法, 这是常见的图论中的最短路径算法, 由 Edsger W.Dijkstra 在 1959 年发表。 这种算法能够给定一个图中的源节点( Source Node), …...
EIgamal 算法实现与解读
EIgamal 算法实现与解读 数学知识1.求原根2.求逆元快速幂求解EIgamal 算法1. Elgamal密钥产生2. Elgamal加密3. Elgamal解密效果如下:数学知识 1.求原根 如果g是p的原根,就是g^(p-1) = 1 (mod P)当且仅当指数为p-1的时候成立.(这里P是素数) 简单来说,g^i mod p ≠ g^j m…...
静态通讯录动态通讯录制作详解
🍕在本期的博客我们来向大家介绍一下静态通讯录的书写以及怎样将我们的静态通讯录更改为动态的模式。 🍔静态通讯录的创建 🍕就像是我们之前进行的完整程序逻辑的书写一样我们同样创建三个文件,两个 .c 文件,一个 .h 文…...
2023最新最详细【接口测试总结】
序章 说起接口测试,网上有很多例子,但是当初做为新手的我来说,看了不不知道他们说的什么,觉得接口测试,好高大上。认为学会了接口测试就能屌丝逆袭,走上人生巅峰,迎娶白富美。因此学了点开发…...
【java基础】Stream流的各种操作
文章目录基本介绍流的创建流的各种常见操作forEach方法filter方法map方法peek方法flatMap方法limit和skip方法distinct方法sorted方法收集结果收集为数组(toArray)收集为集合(collect)收集为Map关于流的一些说明(终结操…...
【Python练习】序列结构
目录 一、实验目标 二、实验内容...
CDN加速缓存的定义与作用
一、CDN的含义CDN的全称是Content Delivery Network,即内容分发网络。CDN是在原有互联网的基础上再构建虚拟分发网络,利用部署在各地的边缘节点服务器,充分发挥其负载均衡、内容分发智能调度等功能,让用户能够就地拉取数据&#x…...
Java并发高频面试题
分享50道Java并发高频面试题。 线程池 线程池:一个管理线程的池子。 为什么平时都是使用线程池创建线程,直接new一个线程不好吗? 嗯,手动创建线程有两个缺点 不受控风险频繁创建开销大 为什么不受控? 系统资源有…...
CVPR 2023 | 旷视研究院入选论文亮点解读
近日,CVPR 2023 论文接收结果出炉。近年来,CVPR 的投稿数量持续增加,今年收到有效投稿 9155 篇,和 CVPR 2022 相比增加 12%,创历史新高。最终,大会收录论文 2360 篇,接收率为 25.78 %。本次&…...
Vue3 学习总结补充(一)
文章目录1、Vue3中为什么修改变量的值后,视图不更新?2、使用 ref 还是 reactive?3、reactive 为什么会有响应性连接丢失情况?4、watch的不同使用方法5、watchEffect和 watch 的区别区别1:数据源的区别区别2:…...
使用ChatGPT 开放的 API 接口可以开发哪些自研工具?
使用ChatGPT开放的API接口,可以开发多种自研工具,例如: 智能聊天机器人:可以使用ChatGPT提供的语言生成能力,构建一个智能聊天机器人,能够根据用户的输入自动回复,完成自然语言交互。 文本生成工具:可以使用ChatGPT的文本生成能力,开发一个文本生成工具,例如自动生…...
I2C和SPI总线以及通信
通讯属性 概括 Serial/parallel 串行/并行Synchronous/asynchronous 同步/异步Point-to-point / bus 点对点 总线Half-duplex/full-duplex 半双工/全双工Master-slave/ equal partners 主从/对等single-ending / differential 单端/差分 点对点和总线 点对点通讯 只有两个通…...
Spring八股文
Bean的生命周期 1.通过反射生成对象 2.填充Bean的属性 3.调用aware接口的invokeAwareMethod方法,对BeanName、BeanFactory、BeanClassLoader对象的属性设值 4.调用BeanPostProcessor的前置处理方法,其中使用较多的是ApplicationContextPostProcessor…...
20 k8sMetric 简介
一. Metric 简介metrics-server 可实现 Kubernetes 的 Resource Metrics API(metrics.k8s.io),通过此 API 可以查询 Pod 与 Node 的部分监控指标,Pod 的监控指标用于 HPA、VPA 与 kubectl top pods -n ns 命令,而 Node…...
面试问了解Linux内存管理吗?10张图给你安排的明明白白
linux内存管理,内存管理好像离我们很远,但这个知识点虽然冷门(估计很多人学完根本就没机会用上)但绝对是基础中的基础,这就像武侠中的内功修炼,学完之后看不到立竿见影的效果,但对你日后的开发工…...
【C++】内联函数inline
文章目录概念使用特性原理概念 C中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内…...
C++演讲比赛流程管理系统_黑马
任务 学校演讲比赛,12人,两轮,第一轮淘汰赛,第二轮决赛 选手编号 [ 10001 - 10012 ] 分组比赛 每组6人 10个评委 去除最高分 最低分,求平均分 为该轮成绩 每组淘汰后三名,前三名晋级决赛 决赛 前三名胜出 …...
谈谈低代码的安全问题,一文全给你解决喽
低代码是一种软件开发方法,通过使用图形化用户界面和可视化建模工具,以及自动生成代码的技术,使得开发人员可以更快速地构建和发布应用程序。 作为近些年软件开发市场热门之一,市面上也涌现了许多低代码产品,诸如简道云…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
