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个评委 去除最高分 最低分,求平均分 为该轮成绩 每组淘汰后三名,前三名晋级决赛 决赛 前三名胜出 …...
谈谈低代码的安全问题,一文全给你解决喽
低代码是一种软件开发方法,通过使用图形化用户界面和可视化建模工具,以及自动生成代码的技术,使得开发人员可以更快速地构建和发布应用程序。 作为近些年软件开发市场热门之一,市面上也涌现了许多低代码产品,诸如简道云…...
文墨共鸣模型作为Claude Code的替代或补充:代码生成与解释能力对比
文墨共鸣模型作为Claude Code的替代或补充:代码生成与解释能力对比 最近和几个做开发的朋友聊天,大家不约而同地提到了一个话题:现在AI写代码的工具这么多,到底哪个更靠谱?有人习惯用GitHub Copilot,有人偏…...
AudioSeal Pixel Studio效果展示:ASMR音频高频细节保留下的水印稳定性验证
AudioSeal Pixel Studio效果展示:ASMR音频高频细节保留下的水印稳定性验证 1. 专业级音频水印技术新标杆 AudioSeal Pixel Studio是基于Meta开源的AudioSeal算法构建的音频保护工具,它重新定义了数字水印技术的标准。这款工具能够在保持原始音频质量的…...
Qwen2.5-VL多模态大模型实战:如何用3090显卡高效部署7B版本(附避坑指南)
Qwen2.5-VL多模态大模型实战:3090显卡高效部署7B版本全攻略 当多模态大模型遇上消费级显卡天花板RTX 3090,会产生怎样的化学反应?作为目前最具性价比的24GB显存解决方案,3090显卡在部署7B参数规模的Qwen2.5-VL时既充满可能又暗藏…...
【PyO3/Rust-Python测试权威框架】:Rust生态下Python扩展的零信任CI流水线设计
第一章:Python 扩展模块测试Python 扩展模块(如用 C/C、Rust 或 Cython 编写的模块)在提升性能的同时,也引入了跨语言交互的复杂性。对其开展系统性测试,是保障功能正确性、内存安全性和 ABI 兼容性的关键环节。测试环…...
Seafile社区版12.0部署实战:从Docker Compose到企业级定制
1. 为什么选择Seafile社区版12.0? 如果你正在寻找一个开源的、可私有化部署的企业级文件同步与共享解决方案,Seafile社区版12.0绝对值得考虑。作为一个长期使用各种云存储解决方案的运维工程师,我发现Seafile在性能、稳定性和功能完整性方面都…...
Ollama部署避坑指南:Ubuntu环境下常见错误排查与性能优化
Ollama部署避坑指南:Ubuntu环境下常见错误排查与性能优化 在Ubuntu系统上部署Ollama时,即使是经验丰富的开发者也可能遇到各种"坑"。本文将深入剖析这些常见问题,并提供切实可行的解决方案,帮助您快速定位和解决问题&am…...
霜儿-汉服-造相Z-Turbo惊艳作品展:AI复原历史人物经典汉服造型
霜儿-汉服-造相Z-Turbo惊艳作品展:AI复原历史人物经典汉服造型 最近,一个名为“霜儿-汉服-造相Z-Turbo”的AI模型在圈子里悄悄火了起来。它干的事儿挺有意思:不是凭空创造新形象,而是试图“复原”那些活在文字、画作和历史记忆里…...
YOLOv8实战:Anchor-Free与Anchor-Based到底怎么选?附完整对比实验代码
YOLOv8技术选型指南:Anchor-Free与Anchor-Based深度对比与实战决策 在目标检测领域的技术选型过程中,工程师们常常面临一个关键抉择:是采用传统的Anchor-Based方法,还是转向新兴的Anchor-Free架构?这个看似简单的选择背…...
Android与SpringBoot的轻量级数据桥梁——OkHttp3实战解析
1. OkHttp3与SpringBoot的黄金组合 第一次用OkHttp3对接SpringBoot后端时,我盯着满屏的404错误差点崩溃。后来才发现,原来是因为手机和电脑不在同一个WiFi下。这种看似低级的错误,恰恰是新手最容易踩的坑。OkHttp3作为Android端最流行的网络请…...
基于Mirage Flow的Java智能助手开发:SpringBoot集成与API封装
基于Mirage Flow的Java智能助手开发:SpringBoot集成与API封装 最近在做一个内部知识库项目,需要给系统加个智能问答的“大脑”。一开始想直接用现成的SaaS服务,但考虑到数据安全和定制化需求,还是决定自己动手,把大模…...
