CSDN 编程竞赛二十九期题解
竞赛总览
CSDN 编程竞赛二十九期:比赛详情 (csdn.net)
竞赛题解
题目1、订班服
小A班级订班服了!可是小A是个小糊涂鬼,整错了好多人的衣服的大小。小A只能自己掏钱包来补钱了。小A想知道自己至少需要买多少件衣服。
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>int search (std::vector<std::string>& data, std::string str) {int result = 0;for (int i = 0; i < data.size (); i++) {if (data [i] == str) result += 1;}return result;
}int main () {int result = 0;int n;scanf ("%d", &n);std::vector<std::string> data [2];for (int i = 0; i < 2; i++) {for (int j = 0; j < n; j++) {std::string str;std::cin >> str;data [i].push_back (str);}}std::string str [] = {"M", "S", "L", "XL", "XLL", "XLLL", "XLLLL", "XLLLLL"};for (int i = 0; i < 8; i++) {int num = search (data [0], str [i]) - search (data [1], str [i]);result += num > 0 ? num : - num;}printf ("%d", result / 2);return 0;
}
此题通过比较两个列表的差异即可计算出答案。
例如,M、S、L被改为了M、S、XL,逐个计算每种型号出现的次数,M1=M2,S1=S2,L1=1但L2=0,所以检测出L这里出错1次。然而,检测到XL时,XL1=0、XL2=1,这里也出错一次。
这样扫描一遍之后,实际上L被改为了XL,但一次更改被统计了两次,所以还要除以2才能得到最终答案。
题目2、争抢糖豆
抓糖豆,小Q与小K都喜欢吃糖豆。但是糖豆分两种,超甜糖豆和普通糖豆。现在有w个超甜糖豆和b个普通糖豆。小Q和小K开始吃糖豆,他们决定谁先吃到超甜糖豆谁就获胜。小K每次吃的时时候会捏碎一颗糖豆。小Q先吃,小Q想知道自己获胜的概率。如果两个人都吃不到超甜糖豆小K获胜。
#include <cstdio>double dp [1005][1005];int main () {int w, b;scanf ("%d %d", &w, &b);for (int i = 1; i <= w; i++) dp [i][0] = 1;for (int i = 1; i <= b; i++) dp [0][i] = 0;for (int i = 1; i <= w; i++) {for (int j = 1; j <= b; j++) {dp [i][j] = (double) i / (i + j);dp [i][j] += j > 1 ? (double) j / (i + j) * (j - 1) / (i + j - 1) * i / (i + j - 2) * dp [i - 1][j - 2] : 0;dp [i][j] += j > 2 ? (double) j / (i + j) * (j - 1) / (i + j - 1) * (j - 2) / (i + j - 2) * dp [i][j - 3] : 0;}}printf ("%.9lf", dp [w][b]);return 0;
}
这道题目结合了动态规划和博弈论的知识,但分析过程不是很难,属于中等难度的题目。
用一个二维数组进行存储,第一个维度表示超甜糖豆数量,第二个维度表示普通糖豆数量,元素值表示当前情况下吃到超甜糖豆的概率。
初始化时,只有超甜糖豆情况下,获胜概率为1;只有普通糖豆情况下,获胜概率为0。
对于w个超甜糖豆和b个普通糖豆,吃到超甜糖豆的概率可以表示为w/(w+b)。
这里就要用到博弈论的知识了,首先从1个超甜糖豆和1个普通糖豆这种情况考虑,可以计算出这种条件下的获胜概率。超甜糖豆和普通糖豆之一的数量超过1时,可以通过游戏过程转移到这种情况。
游戏开始时,小Q先吃糖豆。如果小Q没胜利,小K(机器人)会执行最优策略,且执行操作之后,要么就是小K胜利,要么就是游戏未结束,又轮到小Q操作。整个过程中,小K操作时是全自动的,并且小K的操作取决于小Q之前一步的操作。只有轮到小Q操作时,才有一次主动选择权(虽然吃到的糖豆类型仍是未知的,但可以按照下棋的这种思想来分析)。
小Q吃到超甜糖豆游戏就会结束,概率为w/(w+b)。
没吃到超甜糖豆的概率为b/(w+b)。这时小K会开始吃,他也没吃到超甜糖豆游戏才会继续下去,否则就结束了。小K吃的时候会捏碎一颗糖豆,这时说明他已经将要吃的糖豆拿到了,而不是捏完再吃。因此,当两个人都没吃到超甜糖豆时,游戏继续,概率为b/(w+b) * (b-1)/(w+b-1)。
游戏继续时,分两种情况:捏碎超甜糖豆和捏碎普通糖豆。
捏碎超甜糖豆,概率为w/(w+b-2);捏碎普通糖豆,概率为(b-2)/(w+b-2)。
游戏继续,相对上一回合,糖豆数已经变少。这时,可以使用动态规划算法,套用之前算出来的概率,提升计算效率。
整个分析过程到此结束,其实这道题目并不是很难,但比较考验博弈论分析的基本功。
题目3、走楼梯
现在有一截楼梯,根据你的腿长,你一次能走1级或2级楼梯,已知你要走n级楼梯才能走到你的目的楼层,请实现一个方法,计算你走到目的楼层的方案数。
#include <cstdio>long long int dp [1005] = {1, 1, 2};int main () {for (int i = 3; i < 1005; i++) dp [i] = dp [i - 1] + dp [i - 2];int n;scanf ("%d", &n);printf ("%lld", dp [n]);return 0;
}
初始情况下,位于0级楼梯,到1级楼梯,只能上1级。到2级楼梯,可以0+1+1,也可以直接0+2。
要上到更高级别的楼梯,可以在前一级楼梯的基础上,再上1级;或者,在前两级楼梯的基础上,再上2级。
题目4、打家劫舍
一个小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。
#include <cstdio>int dp [1005];int main () {int n;scanf ("%d", &n);int data [n];for (int i = 0; i < n; i++) scanf ("%d", &data [i]);if (n < 1) {printf ("0");return 0;}if (n == 1) {printf ("%d", data [0]);return 0;}dp [0] = data [0];dp [1] = data [data [1] > data [0] ? 1 : 0];for (int i = 2; i < n; i++) {int val = dp [i - 2] + data [i];dp [i] = val > dp [i - 1] ? val : dp [i - 1];}printf ("%d", dp [n - 1]);return 0;
}
经典的动态规划题目,和上楼梯这道题的难度差不多。
相关文章:
CSDN 编程竞赛二十九期题解
竞赛总览 CSDN 编程竞赛二十九期:比赛详情 (csdn.net) 竞赛题解 题目1、订班服 小A班级订班服了!可是小A是个小糊涂鬼,整错了好多人的衣服的大小。小A只能自己掏钱包来补钱了。小A想知道自己至少需要买多少件衣服。 #include <cstdio…...
基于STM32采用CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试
一、前言 在STM32项目开发中,经常会用到存储芯片存储数据。 比如:关机时保存机器运行过程中的状态数据,上电再从存储芯片里读取数据恢复;在存储芯片里也会存放很多资源文件。比如,开机音乐,界面上的菜单图…...
K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示
K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCAS608光学指纹模块1.2、STM32F103C8T6AS608光学指纹模块五、基础知识学习与相关资料下载六、视…...
map和set介绍及其底层模拟实现
致努力前行的人: 要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 目录 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1set的介绍 3.2set的使用 3.3multiset的使用 3.4map的使用 3.5multimap的使用 4.常见的面试题…...
实现一个比ant功能更丰富的Modal组件
普通的modal组件如下: 我们写的modal额外支持,后面没有蒙版,并且Modal框能够拖拽 还支持渲染在文档流里,上面的都是fixed布局,我们这个正常渲染到文档下面: render部分 <RenderDialog{...restState}visi…...
2023美赛F题思路数据代码分享
文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛F题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片,加入获取一手资源 202…...
Flutter如何与Native(Android)进行交互
前言 上一篇文章《Flutter混合开发:Android中如何启动Flutter》中我们介绍了如何在Native(Android项目)中启动Flutter,展示Flutter页面。但是在开发过程中,很多时候并不是简单的展示一个页面即可,还会涉及…...
数据库主从复制和读写分离
主从数据库和数据库集群的一些问题 数据库集群和主从数据库最本质的区别,其实也就是data-sharing和nothing-sharing的区别。集群是共享存储的。主从复制中没有任何共享。每台机器都是独立且完整的系统。 什么是主从复制? 主从复制,是用来建立一个和主数…...
Java并发编程面试题——线程安全(原子性、可见性、有序性)
文章目录一、原子性高频问题1.1 Java中如何实现线程安全?1.2 CAS底层实现1.3 CAS的常见问题1.4 四种引用类型 ThreadLocal的问题?二、可见性高频问题2.1 Java的内存模型2.2 保证可见性的方式2.3 volatile修饰引用数据类型2.4 有了MESI协议,为啥还有vol…...
DialogFragment内存泄露问题能不能一次性改好
孽缘 自DialogFragment在Android3.0之后作为一种特殊的Fragment引入,官方建议使用DialogFragment代替Dialog或者AllertDialog来实现弹框的功能,因为它可以更好的管理Dialog的生命周期以及可以更好复用。 然而建议虽好,实用须谨慎,…...
java学习--多线程
多线程 了解多线程 多线程是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。 并发和并行 并行:在同一时刻,有多个指令在CPU上同时执行并发࿱…...
90后阿里P7技术专家晒出工资单:狠补了这个,真香...
最近一哥们跟我聊天装逼,说他最近从阿里跳槽了,我问他跳出来拿了多少?哥们表示很得意,说跳槽到新公司一个月后发了工资,月入5万多,表示很满足!这样的高薪资着实让人羡慕,我猜这是税后…...
2023美赛C题:Wordle筛选算法
Wordle 规则介绍 Wordle 每天会更新一个5个字母的单词,在6次尝试中猜出单词就算成功。每个猜测必须是一个有效的单词(不能是不能组成单词的字母排列)。 每次猜测后,字母块的颜色会改变,颜色含义如下: 程…...
SpringBoot 集成 Kafka
SpringBoot 集成 Kafka1 安装 Kafka2 创建 Topic3 Java 创建 Topic4 SpringBoot 项目4.1 pom.xml4.2 application.yml4.3 KafkaApplication.java4.4 CustomizePartitioner.java4.5 KafkaInitialConfig.java4.6 SendMessageController.java5 测试1 安装 Kafka Docker 安装 Kafk…...
OpenCV 图像金字塔算子
本文是OpenCV图像视觉入门之路的第14篇文章,本文详细的介绍了图像金字塔算子的各种操作,例如:高斯金字塔算子 、拉普拉斯金字塔算子等操作。 高斯金字塔中的较高级别(低分辨率)是通过先用高斯核对图像进行卷积再删除偶…...
【自学Linux】Linux一切皆文件
Linux一切皆文件 Linux一切皆文件教程 Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录是文件,硬件设备(键盘、监视器、硬盘、打印机)是文件,就连套接字&…...
CUDA C++扩展的详细描述
CUDA C扩展的详细描述 文章目录CUDA C扩展的详细描述CUDA函数执行空间说明符B.1.1 \_\_global\_\_B.1.2 \_\_device\_\_B.1.3 \_\_host\_\_B.1.4 Undefined behaviorB.1.5 __noinline__ and __forceinline__B.2 Variable Memory Space SpecifiersB.2.1 \_\_device\_\_B.2.2. \_…...
为什么重写equals必须重写hashCode
关于这个问题,看了网上很多答案,感觉都参差不齐,没有答到要点,这次就记录一下! 首先我们为什么要重写equals?这个方法是用来干嘛的? public boolean equals (Object object&#x…...
< 每日小技巧:N个很棒的 Vue 开发技巧, 持续记录ing >
每日小技巧:6 个很棒的 Vue 开发技巧👉 ① Watch 妙用> watch的高级使用> 一个监听器触发多个方法> watch 监听多个变量👉 ② 自定义事件 $emit() 和 事件参数 $event👉 ③ 监听组件生命周期常规写法hook写法ὄ…...
数据结构与算法之二分查找分而治之思想
决定我们成为什么样人的,不是我们的能力,而是我们的选择。——《哈利波特与密室》二分查找是查找算法里面是很优秀的一个算法,特别是在有序的数组中,这种算法思想体现的淋漓尽致。一.题目描述及其要求请实现无重复数字的升序数组的…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
