当前位置: 首页 > news >正文

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 编程竞赛二十九期&#xff1a;比赛详情 (csdn.net) 竞赛题解 题目1、订班服 小A班级订班服了&#xff01;可是小A是个小糊涂鬼&#xff0c;整错了好多人的衣服的大小。小A只能自己掏钱包来补钱了。小A想知道自己至少需要买多少件衣服。 #include <cstdio…...

基于STM32采用CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试

一、前言 在STM32项目开发中&#xff0c;经常会用到存储芯片存储数据。 比如&#xff1a;关机时保存机器运行过程中的状态数据&#xff0c;上电再从存储芯片里读取数据恢复&#xff1b;在存储芯片里也会存放很多资源文件。比如&#xff0c;开机音乐&#xff0c;界面上的菜单图…...

K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示

K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCAS608光学指纹模块1.2、STM32F103C8T6AS608光学指纹模块五、基础知识学习与相关资料下载六、视…...

map和set介绍及其底层模拟实现

致努力前行的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1set的介绍 3.2set的使用 3.3multiset的使用 3.4map的使用 3.5multimap的使用 4.常见的面试题…...

实现一个比ant功能更丰富的Modal组件

普通的modal组件如下&#xff1a; 我们写的modal额外支持&#xff0c;后面没有蒙版&#xff0c;并且Modal框能够拖拽 还支持渲染在文档流里&#xff0c;上面的都是fixed布局&#xff0c;我们这个正常渲染到文档下面&#xff1a; render部分 <RenderDialog{...restState}visi…...

2023美赛F题思路数据代码分享

文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛F题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;加入获取一手资源 202…...

Flutter如何与Native(Android)进行交互

前言 上一篇文章《Flutter混合开发&#xff1a;Android中如何启动Flutter》中我们介绍了如何在Native&#xff08;Android项目&#xff09;中启动Flutter&#xff0c;展示Flutter页面。但是在开发过程中&#xff0c;很多时候并不是简单的展示一个页面即可&#xff0c;还会涉及…...

数据库主从复制和读写分离

主从数据库和数据库集群的一些问题 数据库集群和主从数据库最本质的区别&#xff0c;其实也就是data-sharing和nothing-sharing的区别。集群是共享存储的。主从复制中没有任何共享。每台机器都是独立且完整的系统。 什么是主从复制? 主从复制&#xff0c;是用来建立一个和主数…...

Java并发编程面试题——线程安全(原子性、可见性、有序性)

文章目录一、原子性高频问题1.1 Java中如何实现线程安全?1.2 CAS底层实现1.3 CAS的常见问题1.4 四种引用类型 ThreadLocal的问题&#xff1f;二、可见性高频问题2.1 Java的内存模型2.2 保证可见性的方式2.3 volatile修饰引用数据类型2.4 有了MESI协议&#xff0c;为啥还有vol…...

DialogFragment内存泄露问题能不能一次性改好

孽缘 自DialogFragment在Android3.0之后作为一种特殊的Fragment引入&#xff0c;官方建议使用DialogFragment代替Dialog或者AllertDialog来实现弹框的功能&#xff0c;因为它可以更好的管理Dialog的生命周期以及可以更好复用。 然而建议虽好&#xff0c;实用须谨慎&#xff0c…...

java学习--多线程

多线程 了解多线程 ​ 多线程是指从软件或者硬件上实现多个线程并发执行的技术。 ​ 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 并发和并行 并行&#xff1a;在同一时刻&#xff0c;有多个指令在CPU上同时执行并发&#xff1…...

90后阿里P7技术专家晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…...

2023美赛C题:Wordle筛选算法

Wordle 规则介绍 Wordle 每天会更新一个5个字母的单词&#xff0c;在6次尝试中猜出单词就算成功。每个猜测必须是一个有效的单词&#xff08;不能是不能组成单词的字母排列&#xff09;。 每次猜测后&#xff0c;字母块的颜色会改变&#xff0c;颜色含义如下&#xff1a; 程…...

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篇文章&#xff0c;本文详细的介绍了图像金字塔算子的各种操作&#xff0c;例如&#xff1a;高斯金字塔算子 、拉普拉斯金字塔算子等操作。 高斯金字塔中的较高级别&#xff08;低分辨率&#xff09;是通过先用高斯核对图像进行卷积再删除偶…...

【自学Linux】Linux一切皆文件

Linux一切皆文件 Linux一切皆文件教程 Linux 中所有内容都是以文件的形式保存和管理的&#xff0c;即一切皆文件&#xff0c;普通文件是文件&#xff0c;目录是文件&#xff0c;硬件设备&#xff08;键盘、监视器、硬盘、打印机&#xff09;是文件&#xff0c;就连套接字&…...

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

关于这个问题&#xff0c;看了网上很多答案&#xff0c;感觉都参差不齐&#xff0c;没有答到要点&#xff0c;这次就记录一下&#xff01; 首先我们为什么要重写equals&#xff1f;这个方法是用来干嘛的&#xff1f; public boolean equals &#xff08;Object object&#x…...

< 每日小技巧:N个很棒的 Vue 开发技巧, 持续记录ing >

每日小技巧&#xff1a;6 个很棒的 Vue 开发技巧&#x1f449; ① Watch 妙用> watch的高级使用> 一个监听器触发多个方法> watch 监听多个变量&#x1f449; ② 自定义事件 $emit() 和 事件参数 $event&#x1f449; ③ 监听组件生命周期常规写法hook写法&#x1f44…...

数据结构与算法之二分查找分而治之思想

决定我们成为什么样人的&#xff0c;不是我们的能力&#xff0c;而是我们的选择。——《哈利波特与密室》二分查找是查找算法里面是很优秀的一个算法&#xff0c;特别是在有序的数组中&#xff0c;这种算法思想体现的淋漓尽致。一.题目描述及其要求请实现无重复数字的升序数组的…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...