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;
}
题目规定只能买一种铅笔,而不能混搭。因此,可以使用循环来计算买每种铅笔花费的价格。
当价格比历史价格更低时,则更新历史最低价格对应的铅笔类型。
完成对所有铅笔种类的计算之后,输出最低价格即可。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
CSDN 编程竞赛三十九期题解
竞赛总览 CSDN 编程竞赛三十九期:比赛详情 (csdn.net) 竞赛题解 题目1、圆小艺 最近小艺酱渐渐变成了一个圆滑的形状球,小艺酱开始变得喜欢上球!小艺酱得到n个同心圆。小艺酱对着n个同心圆进行染色,相邻的圆范围内不能有相同的…...
![](https://img-blog.csdnimg.cn/79420d1dac3c40c580d078b82ed748eb.png#pic_center)
ChatGPT来了你慌了吗?
文章目录一、ChatGPT是什么?一、ChatGPT到底多强大?三、各平台集成了ChatGPT插件:四、ChatGPT能否取代程序员?一、ChatGPT是什么? ChatGPT(全名:Chat Generative Pre-trained Transformer&…...
![](https://img-blog.csdnimg.cn/img_convert/082e5cf7cada4986b2def873bb62f320.png)
Dijkstra 算法
Dijkstra 算法( 迪杰斯特拉算法), 又叫最短路径算法, 这是常见的图论中的最短路径算法, 由 Edsger W.Dijkstra 在 1959 年发表。 这种算法能够给定一个图中的源节点( Source Node), …...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://img-blog.csdnimg.cn/25f53e98b7914f338ded174402acbcfa.png)
静态通讯录动态通讯录制作详解
🍕在本期的博客我们来向大家介绍一下静态通讯录的书写以及怎样将我们的静态通讯录更改为动态的模式。 🍔静态通讯录的创建 🍕就像是我们之前进行的完整程序逻辑的书写一样我们同样创建三个文件,两个 .c 文件,一个 .h 文…...
![](https://img-blog.csdnimg.cn/img_convert/dcd8dd6d2fe4ac83ce2dc9514dc6cd29.png)
2023最新最详细【接口测试总结】
序章 说起接口测试,网上有很多例子,但是当初做为新手的我来说,看了不不知道他们说的什么,觉得接口测试,好高大上。认为学会了接口测试就能屌丝逆袭,走上人生巅峰,迎娶白富美。因此学了点开发…...
![](https://img-blog.csdnimg.cn/a7ee5a4d53984c2da31194e803c99fe1.png)
【java基础】Stream流的各种操作
文章目录基本介绍流的创建流的各种常见操作forEach方法filter方法map方法peek方法flatMap方法limit和skip方法distinct方法sorted方法收集结果收集为数组(toArray)收集为集合(collect)收集为Map关于流的一些说明(终结操…...
![](https://www.ngui.cc/images/no-images.jpg)
【Python练习】序列结构
目录 一、实验目标 二、实验内容...
![](https://img-blog.csdnimg.cn/img_convert/eff84739692b72416faa7ebcc2d67ad6.jpeg)
CDN加速缓存的定义与作用
一、CDN的含义CDN的全称是Content Delivery Network,即内容分发网络。CDN是在原有互联网的基础上再构建虚拟分发网络,利用部署在各地的边缘节点服务器,充分发挥其负载均衡、内容分发智能调度等功能,让用户能够就地拉取数据&#x…...
![](https://img-blog.csdnimg.cn/img_convert/cf2d28279c4f22578f1d39203d28532d.png)
Java并发高频面试题
分享50道Java并发高频面试题。 线程池 线程池:一个管理线程的池子。 为什么平时都是使用线程池创建线程,直接new一个线程不好吗? 嗯,手动创建线程有两个缺点 不受控风险频繁创建开销大 为什么不受控? 系统资源有…...
![](https://img-blog.csdnimg.cn/img_convert/caa37be2d781dcdb52532429a294f286.png)
CVPR 2023 | 旷视研究院入选论文亮点解读
近日,CVPR 2023 论文接收结果出炉。近年来,CVPR 的投稿数量持续增加,今年收到有效投稿 9155 篇,和 CVPR 2022 相比增加 12%,创历史新高。最终,大会收录论文 2360 篇,接收率为 25.78 %。本次&…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue3 学习总结补充(一)
文章目录1、Vue3中为什么修改变量的值后,视图不更新?2、使用 ref 还是 reactive?3、reactive 为什么会有响应性连接丢失情况?4、watch的不同使用方法5、watchEffect和 watch 的区别区别1:数据源的区别区别2:…...
![](https://img-blog.csdnimg.cn/57505667fcfa45aaa5d163a59d6faf76.png)
使用ChatGPT 开放的 API 接口可以开发哪些自研工具?
使用ChatGPT开放的API接口,可以开发多种自研工具,例如: 智能聊天机器人:可以使用ChatGPT提供的语言生成能力,构建一个智能聊天机器人,能够根据用户的输入自动回复,完成自然语言交互。 文本生成工具:可以使用ChatGPT的文本生成能力,开发一个文本生成工具,例如自动生…...
![](https://img-blog.csdnimg.cn/ebfbe1c646d24812a3a286c54bc08e0b.png)
I2C和SPI总线以及通信
通讯属性 概括 Serial/parallel 串行/并行Synchronous/asynchronous 同步/异步Point-to-point / bus 点对点 总线Half-duplex/full-duplex 半双工/全双工Master-slave/ equal partners 主从/对等single-ending / differential 单端/差分 点对点和总线 点对点通讯 只有两个通…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring八股文
Bean的生命周期 1.通过反射生成对象 2.填充Bean的属性 3.调用aware接口的invokeAwareMethod方法,对BeanName、BeanFactory、BeanClassLoader对象的属性设值 4.调用BeanPostProcessor的前置处理方法,其中使用较多的是ApplicationContextPostProcessor…...
![](https://www.ngui.cc/images/no-images.jpg)
20 k8sMetric 简介
一. Metric 简介metrics-server 可实现 Kubernetes 的 Resource Metrics API(metrics.k8s.io),通过此 API 可以查询 Pod 与 Node 的部分监控指标,Pod 的监控指标用于 HPA、VPA 与 kubectl top pods -n ns 命令,而 Node…...
![](https://img-blog.csdnimg.cn/aa351e48e0cf460fb8f02fd3d12ca5e9.png)
面试问了解Linux内存管理吗?10张图给你安排的明明白白
linux内存管理,内存管理好像离我们很远,但这个知识点虽然冷门(估计很多人学完根本就没机会用上)但绝对是基础中的基础,这就像武侠中的内功修炼,学完之后看不到立竿见影的效果,但对你日后的开发工…...
![](https://img-blog.csdnimg.cn/ebbb3066af844d009b06cf1c4be1a18f.png)
【C++】内联函数inline
文章目录概念使用特性原理概念 C中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内…...
![](https://img-blog.csdnimg.cn/08877d793ddc43beade15a348d80dd7c.png#pic_center)
C++演讲比赛流程管理系统_黑马
任务 学校演讲比赛,12人,两轮,第一轮淘汰赛,第二轮决赛 选手编号 [ 10001 - 10012 ] 分组比赛 每组6人 10个评委 去除最高分 最低分,求平均分 为该轮成绩 每组淘汰后三名,前三名晋级决赛 决赛 前三名胜出 …...
![](https://img-blog.csdnimg.cn/70b2ccb3a69040198f6ce5c1ea63ae57.png)
谈谈低代码的安全问题,一文全给你解决喽
低代码是一种软件开发方法,通过使用图形化用户界面和可视化建模工具,以及自动生成代码的技术,使得开发人员可以更快速地构建和发布应用程序。 作为近些年软件开发市场热门之一,市面上也涌现了许多低代码产品,诸如简道云…...
![](https://img-blog.csdnimg.cn/91adf00b0825429ea3cbc7b01e5bd64d.png)
[数据结构]二叉树OJ(leetcode)
目录 二叉树OJ(leetcode)训练习题:: 1.单值二叉树 2.检查两棵树是否相同 3.二叉树的前序遍历 4.另一棵树的子树 5.二叉树的构建及遍历 6.二叉树的销毁 7.判断二叉树是否是完全二叉树 二叉树OJ(leetcode)训练习题:: 1.单值二叉…...
![](https://img-blog.csdnimg.cn/2a5f11a87eee478a94bcb00c022b51dd.png)
flutter 输入时插入分隔符
每四位插入一个分隔符import package:flutter/services.dart;class DividerInputFormatter extends TextInputFormatter {final int rear; //第一个分割位数,后面分割位,,数final String pattern; //分割符DividerInputFormatter({this.rear 4, this.pattern });overrideTex…...
![](https://img-blog.csdnimg.cn/578b90bf2bd9471eaf73d443ccd95a6f.jpeg)
静态版通讯录——“C”
各位CSDN的uu你们好呀,之前小雅兰学过了一些结构体、枚举、联合的知识,现在,小雅兰把这些知识实践一下,那么,就让我们进入通讯录的世界吧 实现一个通讯录: 可以存放100个人的信息每个人的信息:名…...
![](https://www.ngui.cc/images/no-images.jpg)
前端基础开发环境搭建工具等
一、基本开发环境(软件)安装1、Vscode(代码编辑器)官网下载网址:https://code.visualstudio.com/2、nvm(node多版本管理器,每个node版本都有对应的npm版本)安装包下载地址࿱…...
![](https://img-blog.csdnimg.cn/931571665af143c8a82e55b0127ddc74.png#pic_center)
华为OD机试题【IPv4 地址转换成整数】用 Java 解 | 含解题说明
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:IPv4 地址转换成整数 题目 存在…...
![](https://img-blog.csdnimg.cn/54f437c4d1cf4003aad5239438f7a233.png)
[数据结构]排序算法
目录 常用排序算法的实现:: 1.排序的概念及其运用 2.插入排序 3.希尔排序 4.选择排序 5.冒泡排序 6.堆排序 7.快速排序 8.归并排序 9.排序算法复杂度及稳定性分析 10.排序选择题练习 常用排序算法的实现:: 1.排序的概念及其运用…...
![](https://img-blog.csdnimg.cn/img_convert/9bd50ef5458a52b59147788c6f81a900.png)
不愧是2023年就业最难的一年,还好有车企顶着~
就业龙卷风已经来临,以前都说找不到好的工作就去送外卖,但如今外卖骑手行业都已经接近饱和状态了,而且骑手们的学历也不低,本科学历都快达到了30%了,今年可以说是最难找到工作的一年。 像Android 开发行业原本就属于在…...
![](https://img-blog.csdnimg.cn/img_convert/0688e090afb6e96a572ac53157e746e7.gif)
C/C++之while(do-while)详细讲解
目录 while循环有两个重要组成部分: while 是一个预测试循环 无限循环 do-while 循环 while循环有两个重要组成部分: 进行 true 值或 false 值判断的表达式;只要表达式为 true 就重复执行的语句或块;图 1 显示了 while 循环的…...
![](https://img-blog.csdnimg.cn/70dec3dfec5f437fb9b4377063ca66c1.png)
SpringCloud学习笔记(一)认识微服务
一、微服务技术栈 二、单体架构和分布式架构的区别 1、单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包进行部署 优点:架构简单,部署成本低缺点:耦合度高 2、分布式架构: 根据业务功能对系统…...
![](https://img-blog.csdnimg.cn/5f2484d5c4ed4d43bd1f1b10d53fc544.png)
Unity中使用WebSocket (ws://)的方法
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 WebSocket与http 其…...
![](https://www.oschina.net/img/hot3.png)
给企业做网站的公司/知乎营销推广
2019独角兽企业重金招聘Python工程师标准>>> $img $goods_info[goods_desc];//正则匹配获取img src属性中的地址$reg_tag <img.*?src"(.*?)">;preg_match_all($reg_tag,$img,$goods_info_img, PREG_SET_ORDER);// 处理urlforeach ($goods_info_…...
![](/images/no-images.jpg)
关键词和网站的关系/seo主要做什么
使用rpm命令查询软件包: 1、查询系统中安装的所有RPM包 $ rpm -qa 查询当前linux系统中已经安装的软件包。 例:$ rpm -qa | grep -i x11 | head -3 察看系统中包含x11字符串的前3行软件包。 2、查询软件包是否安装 $ rpm –q rpm包名称 察看系统中指定软…...
![](https://img-blog.csdnimg.cn/img_convert/835888de17dbc661456ee866ad001227.png)
湖南长沙又检出1例阳性/关键词优化怎么弄
Linux编程点击右侧关注,免费入门到精通!网友说,他家汪星人自从体验过滑板之后就再也不肯下地走路了。推荐↓↓↓ 长按关注?【16个技术公众号】都在这里!涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客…...
![](/images/no-images.jpg)
服务器做网站哪个系统好/seo是什么部门
以下关于Applet和Java程序之间关系的叙述,哪项错误?A. -个Applet就是一段Java程序B.Applet是一种特殊的Java程序,它需要运行在Web服务器上C.Applet是一种特殊的Java程序,它需要运行在Web浏览器上…...
![](https://img2018.cnblogs.com/blog/1606021/201905/1606021-20190530123306429-198187998.png)
wordpress隐藏音乐/seo如何优化排名
上一篇博客我和大家分享了vue render函数的基础使用 这篇博客我们来简单讲一讲render函数他是怎么实现得 先来一张官方得图 在实例初始化得时候,html通过render函数编译生成了一个虚拟dom,视图层会根据虚拟dom生成一个真实dom 然后如果响应数据发生变化得…...
![](https://img-blog.csdnimg.cn/20191214112123641.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1NTE1NjYx,size_16,color_FFFFFF,t_70)
学做网站需要什么条件/怎么才能在百度上做引流呢
声音断续问题: 切换最下面 stereo就行...