CSDN 编程竞赛·第八期总结

2023-10-23 18:50

本文主要是介绍CSDN 编程竞赛·第八期总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CSDN 编程竞赛·第八期总结

    • 代写匿名信
    • 小艺改编字符串
    • 开学趣闻之美食诱惑
    • 争抢糖豆

CSDN 编程竞赛·第八期为笔者参加的第三次 CSDN 编程竞赛,本来报名了第七期的,因为时间和二十大撞了,就错过了,第八期成绩似乎不错,排名第6(刚好没奖555,还挺想要签名书的),写博客一篇做总结。

竞赛成绩

11.02补充
第3名被判定违规了,这下能有签名书了,好耶!

获奖名单

本次编程竞赛一共4题,笔者完美通过3题,现对比赛的4道题目进行总结。

代写匿名信

题目描述:
小Q想要匿名举报XX领导不务正业! 小Q害怕别人认出他的字迹。 他选择从报纸上剪裁下来英文字母组成自己的举报信。
现在小Q找来了报纸,和自己的举报信的Txt, 你能帮他确定一下是否能够完成匿名信吗?

简单题,暴力过:

class Solution:def __init__(self) -> None:passdef solution(self, words, msg):result = Nonewords = set(list(words))result = all([i in words for i in msg])result = 'Yes' if result else 'No'return resultif __name__ == "__main__":words = input().strip()msg = input().strip()sol = Solution()result = sol.solution(words, msg)print(result)

小艺改编字符串

题目描述:
已知字符串str. 添加至少多少字符可以使得str变成回文串。

一道动态规划题,dp[i][j]代表字符串si+1到第j+1个字符形成的子串变为回文串所需要添加的最少字符数:

class Solution:def __init__(self) -> None:passdef solution(self, s):n = len(s)dp = [[0 for i in range(n)] for j in range(n)]for k in range(1, n):for i in range(n-k):j = i+kif s[i] == s[j]:dp[i][j] = dp[i+1][j-1]else:dp[i][j] = min(dp[i+1][j], dp[i][j-1])+1return dp[0][n-1]if __name__ == "__main__":s = input().strip()sol = Solution()result = sol.solution(s)print(result)

开学趣闻之美食诱惑

题目描述:
小艺酱又开学了,可是在上学的路上总会有各种意想不到的美食诱惑让小艺酱迟到。 假设小艺酱家到学校是一个n*n的矩
阵。 每个格子包含一个诱惑值p,诱惑着小艺,让她迟到。 小艺位于矩阵的左上角,学校在矩阵的右下角落。 小艺想知道
自己到达学校所要经历的最小诱惑值是?

纯纯的动态规划,dp[i][j]代表走到[i][j]经历的最小诱惑值,比第2题简单:

class Solution:def __init__(self) -> None:passdef solution(self, n, vector):result = Nonedp = [[0 for i in range(n)] for j in range(n)]dp[0][0]=vector[0][0]for i in range(1,n):dp[0][i] = dp[0][i-1]+vector[0][i]dp[i][0] = dp[i-1][0]+vector[i][0]for i in range(1,n):for j in range(1,n):dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + vector[i][j]return dp[-1][-1]if __name__ == "__main__":n = int(input().strip())vector = []for i in range(n):vector.append([int(item) for item in input().strip().split()])sol = Solution()result = sol.solution(n, vector)print(result)

争抢糖豆

题目描述:
抓糖豆,小Q与小K都喜欢吃糖豆。 但是糖豆分两种,超甜糖豆和普通糖豆。 现在有w个超甜糖豆和b个普通糖豆。 小Q和
小K开始吃糖豆,他们决定谁先吃到超甜糖豆谁就获胜。 小K每次吃的时候会捏碎一颗糖豆。 小Q先吃,小Q想知道自己获
胜的概率。 如果两个人都吃不到超甜糖豆小K获胜。

还是动态规划,比赛的时候有个情况写错了,dp[i][j]代表有i个超甜糖豆和j个普通糖豆时小Q的胜率,状态转移方程如下:

d p i , j = i i + j + j i + j × j − 1 i + j − 1 × i i + j − 2 × d p i − 1 , j − 2 + j i + j × j − 1 i + j − 1 × j − 2 i + j − 2 × d p i , j − 3 dp_{i,j}=\frac{i}{i+j}+\frac{j}{i+j}\times\frac{j-1}{i+j-1}\times\frac{i}{i+j-2}\times dp_{i-1,j-2}+\frac{j}{i+j}\times\frac{j-1}{i+j-1}\times\frac{j-2}{i+j-2}\times dp_{i,j-3} dpi,j=i+ji+i+jj×i+j1j1×i+j2i×dpi1,j2+i+jj×i+j1j1×i+j2j2×dpi,j3

class Solution:def __init__(self) -> None:passdef solution(self, w, b):dp = [[0]*(b+1) for i in range(w+1)]for i in range(1,w+1):dp[i][0] = 1for i in range(b+1):dp[0][b] = 0for i in range(1,w+1):for j in range(b+1):dp[i][j] = i/(i+j)if j >= 2:dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2]if j >= 3:dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3]return dp[w][b]if __name__ == "__main__":w, b = [int(item) for item in input().strip().split()]sol = Solution()result = sol.solution(w)print(f'{result:.9f}')

以上就是这次 CSDN 编程竞赛的全部内容了,如有错误,请读者指正。

这篇关于CSDN 编程竞赛·第八期总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/269790

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push