【CSDN 竞赛—第10期】所有题目解法的思考和总结

news2024/11/21 0:28:51

目录

一、 熊孩子拜访

二、 走楼梯

三、括号上色

四、喜水青蛙


一、 熊孩子拜访

已知存在一个长度为n的整数序列A。 A中所有元素按照从小到达的顺序进行排序。 现在执行操作倒置一段序列。 请找到A序列里的倒置子序列。

我的解题思路(通过所有测试用例): 

class Solution:
    def __init__(self) -> None:
        pass
    def solution(self, n, arr):
        result = []
        # 保存右值
        max = 0
        # 保存左值
        min = 0
        next = 0
        for item in arr:
            if next>item and item>max:
                max=next
                min=item
            elif next<min and item>max:
                min=next
            next=item
        result.append(str(min))
        result.append(str(max))
        if len(result)==0:
            result=["0","0"]
        return result

if __name__ == "__main__":
    n = int(input().strip())
    arr = [int(item) for item in input().strip().split()]
    sol = Solution()
    result = sol.solution(n, arr)
    print(" ".join(result))

输入描述:第一行输入整数 n ,第二行输入 n 个整数(1<=n<=1000)

输出描述:输出被倒置的数列的左值和右值,如果没有,输入0 0

例如:

 

 


二、 走楼梯

现在有一截楼梯, 根据你的腿长, 你一次能走 1 级或 2 级楼梯, 已知你要走 n 级楼梯才能走到你的目的楼层, 请实现一个方法, 计算你走到目的楼层的方案数。

我的解题思路:

class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, n):
        if isinstance(n, int) and n > 0:
            basic_dic = {1: 1, 2: 2}
            if n in basic_dic.keys():
                return basic_dic[n]
            else:
                return self.solution(n - 1) + self.solution(n - 2)
        else:
            return False


if __name__ == "__main__":
    n = int(input().strip())
    sol = Solution()
    result = sol.solution(5)
    print(result)

输入和输出: 


如果采用非递归,如何实现呢?——递推法

类似的一道题:一栋楼有N阶楼梯,兔子每次可以跳1、2或3阶,问一共有多少种走法?

def solution(n):
  if isinstance(n,int) and n > 0:
    # 如果台阶数总共有3个,那么有4种走法:
    # 1 1 1 
    # 1 2
    # 2 1
    # 3    
    # 如果n为4,有7种走法
    # 1 3
    # 3 1
    # 22
    # 1111
    # 211
    # 121
    # 112
    # 有4级台阶
    # temp=1,h1=2,h2=4,h3=1+2+4,返回7
    # 有5级台阶
    # temp=1,h1=2,h2=4,h3=1+2+4
    # temp=2,h1=4,h2=1+2+4,h3=2+4+1+2+4,返回13
    h1,h2,h3 = 1,2,4
    basic_dic = {1:1,2:2,3:4}
    if stairs in basic_dic.keys():
      return basic_dic[n]
    else:
      while n>=4:
        temp = h1
        h1 = h2
        h2 = h3
        h3 = temp + h1 + h2
        n-=1
      return h3
  else:
    return False
# 总结:
# 如果一次可以走1、2或3步的话,那么:第N级楼梯的走法是N-1级楼梯的走法+N-2级楼梯的走法+N-2级楼梯的走法


三、括号上色

小艺酱又得到了一堆括号。 括号是严格匹配的。 现在给括号进行上色。 上色有三个要求: 1、 只有三种上色方案, 不上色, 上红色, 上蓝色。 2、 每对括号只有一个上色。 3、 相邻的两个括号不能上相同的颜色, 但是可以都不上色。 问括号上色有多少种方案? 答案对1000000007取模。

以下代码参考:

【3.29百度笔试编程解析】CodeForces 149D 括号染色问题 dp+dfs好题_和你在一起^_^的博客-CSDN博客题目大意给一个给定括号序列,给该括号上色,上色有三个要求1、只有三种上色方案,不上色,上红色,上蓝色2、每对括号必须只能给其中的一个上色3、相邻的两个不能上同色,可以都不上色题目分析求0-len-1这一区间内有多少种上色方案,很明显的区间DPdp[l][r][i][j]表示l-r区间两端颜色分别是i,j的方案数0代表不上色,1代表上红色,2代表上蓝色对于l-r区间,有3种情况1...https://blog.csdn.net/weixin_42462804/article/details/105194872

import sys

s = input()
num = strlen = len(s)
tmp = [0 for i in range(num)]  # 记录左括号的位置
match = [0 for i in range(num)]  # 记录右匹配的位置
dp = [[[[0 for i in range(3)] for i in range(3)] for i in range(num)] for i in range(num)]
# 由内向外建立多维dp 数组的形式
# dp=np.arange(3*3*num*num).reshape(num,num,3,3)
# 0代表不上色,1代表上红色,2代表上蓝色
mod = 1000000007


def getmatch(len):
    p = 0
    for i in range(len):
        if (s[i] == '('):
            tmp[p] = i
            p = p + 1
        else:
            match[i] = tmp[p - 1]
            match[tmp[p - 1]] = i
            p = p - 1


def dfs(l, r):
    if (l + 1 == r):  # 边界条件
        dp[l][r][0][1] = 1
        dp[l][r][1][0] = 1
        dp[l][r][0][2] = 1
        dp[l][r][2][0] = 1
        return
    if (match[l] == r):  # 如果匹配的话方案数相加
        dfs(l + 1, r - 1)
        for i in range(3):
            for j in range(3):
                if (j != 1):
                    dp[l][r][0][1] = (dp[l][r][0][1] + dp[l + 1][r - 1][i][j]) % mod;
                if (i != 1):
                    dp[l][r][1][0] = (dp[l][r][1][0] + dp[l + 1][r - 1][i][j]) % mod;
                if (j != 2):
                    dp[l][r][0][2] = (dp[l][r][0][2] + dp[l + 1][r - 1][i][j]) % mod;
                if (i != 2):
                    dp[l][r][2][0] = (dp[l][r][2][0] + dp[l + 1][r - 1][i][j]) % mod;
        return
    else:  # 否则方案数相乘,乘法原理
        p = match[l]
        dfs(l, p)
        dfs(p + 1, r)
        for i in range(3):
            for j in range(3):
                for k in range(3):
                    for q in range(3):
                        if not ((k == 1 and q == 1) or (k == 2 and q == 2)):
                            dp[l][r][i][j] = (dp[l][r][i][j] + (dp[l][p][i][k] * dp[p + 1][r][q][j]) % mod) % mod


if __name__ == '__main__':
    getmatch(strlen)
    dfs(0, strlen - 1)
    ans = 0
    for i in range(3):
        for j in range(3):
            ans = (ans + dp[0][strlen - 1][i][j]) % mod;
    sys.stdout.write(str(ans))

本题属于括号匹配,用到区间上的动态规划(DP),可以参考以下博文学习入门:

区间dp入门_阿阿阿安的博客-CSDN博客_区间dp一.什么是区间dp?顾名思义:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的 最优解进而得出整个大区间上最优解的dp算法。二.核心思路既然让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,再合并小区间得到大区间即可。所以在代码实现上,我可以枚举区间长度len为每次分割成的小区间长度(由短到长不断合并),内层枚举该长度下可以的...https://blog.csdn.net/qq_40772692/article/details/80183248


四、喜水青蛙

总是喜欢在水里嬉戏的青蛙, 某天要过河拜访一位朋友。已知河道中长满了带刺的不知名生物, 能通过的路只有一条直线, 长度为L。直线上随机分布着m块石头。 青蛙的最小跳跃距离是s, 最大跳跃距离是t。青蛙想要尽可能的少踩石头, 那么它通过河道最少会踩到多少石头?

输入描述:

多组数据输入,其中每组数据:
第一行输入1个整数L(1<=L<=1e9)。
第二行输入3个整数:s、t、m(1<=s<=t<=10,1<=m<=100)。
第三行输入m个不同的整数,表示m个石子在数轴上的分布位置。
每行所有相邻整数用空格隔开。

输出描述:

输出青蛙过河最少会踩到的石子数量,
每组输入数据对应的输出结果单独成行。

输入样例:

10
2 3 5
2 3 5 6 7

输出样例:

2


以下代码来自:
https://bbs.csdn.net/topics/607060820https://bbs.csdn.net/topics/607060820

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void solution(int L, int ar[], int arr[]);
void move(int s, int count, int L,  int ar[],  int arr[]);
int res=INT_MAX;
int main(){
    int L;
    int ar[3];
    int *arr;
    scanf("%d",&L);
    for(int i=0;i<3;i++){
        scanf("%d",&ar[i]);
    }
    arr=malloc(sizeof(int)*ar[2]);
    for(int i=0;i<ar[2];i++){
        scanf("%d",&arr[i]);
    }
    solution(L,ar,arr);
    printf("%d",res);
}
void solution(int L, int ar[], int arr[]){
    int s=0;
    int count=0;
    move(s, count, L,  ar,  arr);
}
void move(int s, int count, int L, int ar[],int arr[]){
    if(s<L){
        for(int i=0;i<ar[2];i++){
            if(s==arr[i]){
                count++;
            }
        }
        for(int j=ar[0];j<=ar[1];j++){
            move(s+j,count,L,ar,arr);
        }
//        move(s+ar[0],count,L,ar,arr);
//        move(s+ar[1],count,L,ar,arr);
    }else{
        if(res>count){
            res=count;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]java毕业设计星期八酒店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Opengl ES之PBO

叨叨一句几句 关于Opengl的系列已经有较长的一段时间没有更新了&#xff0c;然而这个系列还远没有到完毕地步&#xff0c;后续至少还有关于Opengl矩阵变换、YUV与RGB互转、Opengl水印贴图、Opengl转场动画等主题文章。 断更的主要原因如果给自己找个借口的话可以说是工作比价…

1100w播放、45w涨粉!黑马UP在B站20天逆袭登顶!

在B站生活区里&#xff0c;“搞笑区”的流量独占鳌头&#xff0c;创作者也是络绎不绝。 为此&#xff0c;B站官方对搞笑内容创作布局了长期的扶持计划&#xff0c;比较热门的两个活动“搞笑新星训练营”、“搞笑研究所”是搞笑内容投稿最多的&#xff0c;至今两个活动已经分别…

动手实践丨基于ModelAtrs使用A2C算法制作登月器着陆小游戏

摘要&#xff1a;在本案例中&#xff0c;我们将展示如何基于A2C算法&#xff0c;训练一个LunarLander小游戏。本文分享自华为云社区《使用A2C算法控制登月器着陆》&#xff0c;作者&#xff1a;HWCloudAI 。 LunarLander是一款控制类的小游戏&#xff0c;也是强化学习中常用的…

C# dll代码混淆加密

目录 一、需求 二、用法 1.新建C#项目 2.开始加密 3.常见的错误 4.添加加密规则 5.导出加密dll 6.调用加密dll 结束 一、需求 C# 项目生成 dll&#xff0c;在反编译工具下&#xff0c;好比皇帝的新装&#xff0c;dll 内部的代码看的一清二楚&#xff0c;在这里推荐一…

关于Cy5.5 alkyne,Cyanine7 alkyne和1628790-37-3,1998119-13-3两者的区别

外观以及性质&#xff1a; Cy5.5 alkyne和Cy7alkyne 都含有荧光基团&#xff0c;其中氰基7的炔烃衍生物&#xff0c;近红外荧光团&#xff0c;Cy7的类似物&#xff0c;Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃&#xff0c;炔烃可以通过铜催化的点击化学与多种…

Ubuntu 22.04 一次及其繁琐的 允许 Traceroute 探测漏洞修复之旅

前言&#xff1a;允许 Traceroute 探测是绿盟漏洞扫描器报出来的一个漏洞&#xff0c;如下图&#xff1a; 我的系统是ubuntu 22.04&#xff0c;但由于是用户提供的虚拟机&#xff0c;会有些定制的部分&#xff0c;具体定制了哪部分就不知道了&#xff0c;直接描述问题。 解决问…

【服务器数据恢复】LINUX误删除、误格式化的数据恢复

Linux误删除及误格式化的数据恢复方案针对的文件系统&#xff1a; 1 、基于EXT2/EXT3/EXT4文件系统 &#xff1b; 2 、基于Reiserfs文件系统&#xff1b; 3 、基于Xfs文件系统。 Linux误删除及误格式化的数据恢复解决方案&#xff1a; 一、故障检测&#xff1a; 1、检测是否存在…

java学习day56(Spring Boot)Spring Boot

主要内容&#xff1a; 1.Spring Boot基本应用 2.Spring Boot原理深入及源码剖析 3.Spring Boot数据访问 4.Spring Boot视图技术 5.Spring Boot实战演练 6.Spring Boot项目部署 1. SpringBoot基本应用 1.1 约定优于配置Build Anything with Spring Boot&#xff1a;Spring Boot …

【数据结构】堆的实现及排序

目录一、树的相关概念及其特殊二叉树1、数的相关概念2、特殊二叉树二、堆1、堆的实现1.1、堆向下调整算法和向上调整算法的时间复杂度1.2、堆的构建1.3、堆的插入1.4、堆的删除1.5、取堆顶的数据、堆的个数及堆的判空2、堆的排序一、树的相关概念及其特殊二叉树 讲堆之前&#…

透视虎牙斗鱼三季报:游戏直播在各自“求变”中见分晓

游戏直播行业&#xff0c;依然硝烟弥漫。 经历千播大战、熊猫出局的洗礼后&#xff0c;虎牙和斗鱼双方缠斗升级&#xff0c;另有B站和抖音、快手等视频平台来势汹汹&#xff0c;抢夺仅有的市场蛋糕。 而在游戏行业遇冷、政策趋严等因素多重考验下&#xff0c;这场争夺战无疑将…

fsync

由于目前操作系统都具有延迟写(delayed write)功能&#xff0c; fwrite/write并不会直接把数据写到磁盘上&#xff0c; 而是在buffer满时才开始写入到磁盘。 要想把数据写到磁盘上&#xff0c;需要调用fsync函数 open(fd) write(fd) fsync(fd) close(fd) 或者 fopen(fp…

金仓数据库KingbaseES查询计划剖析

目录 1、KingbaseES数据库中的查询生命周期 2、数据设置 3、KingbaseES解释一个查询 4、什么是数据库中的缓冲区和缓存&#xff1f; 5、VERBOSE 命令参数 6、KingbaseES中的 FORMAT 解释 7、总结EXPLAIN使用方式 8、执行计划查看 了解KingbaseES查询计划对于开发人员和…

HarmonyOS应用API手势方法-绑定手势方法

述&#xff1a;为组件绑定不同类型的手势事件&#xff0c;并设置事件的响应方法。 Api&#xff1a;从API Version 7开始支持 一、绑定手势识别&#xff1a; 通过如下属性给组件绑定手势识别&#xff0c;手势识别成功后可以通过事件回调通知组件。 名称参数类型默认值描述ge…

银河麒麟V10+达梦数据库8保姆级安装教程

银河麒麟V10达梦数据库8保姆级安装教程 一、系统和数据库的下载 银河麒麟V10版本&#xff1a; 首页 → 桌面操作系统 → 银河麒麟桌面操作系统V10 → 试用&#xff08;填写信息&#xff09; → 点击地址进行下载&#xff08;X86centos7&#xff09; #如果不想进行上面的操作,…

Casbin——Java版本(笔记)

文章目录一、Casbin 是什么&#xff1f;二、快速开始2.1 载入配置2.2 如何判断权限2.3 model.conf2.3.1 基本格式2.3.2 SpringBoot下的使用2.3.3 匹配的函数内置函数自定义函数2.3.4 基于角色的访问控制角色的层次区分用户和角色隐式角色权限域内RBAC角色与函数2.3.5 优先级模型…

react事件系统(老版本)

带着问题阅读探索 React 为什么有自己的事件系统&#xff1f;什么是事件合成 &#xff1f;如何实现的批量更新&#xff1f;事件系统如何模拟冒泡和捕获阶段&#xff1f;如何通过 dom 元素找到与之匹配的fiber&#xff1f;为什么不能用 return false 来阻止事件的默认行为&…

python【PyQt5】的环境搭建和使用(全网最全)其一

什么是pyQT pyqt是一个用于创建GUI应用程序的跨平台工具包&#xff0c;它将python与qt库融为一体。也就是说&#xff0c;pyqt允许使用python语言调用qt库中的API。这样做的最大好处就是在保存了qt高运行效率的同时&#xff0c;大大提高开发效率。因为&#xff0c;使用python语言…

城市路边停车收费系统/停车收费管理系统

摘 要 近年来&#xff0c;随着社会的进步和发展&#xff0c;车辆也在迅速增加&#xff0c;城市交通的瓶颈不仅体现在道路交通的拥挤上&#xff0c;也体现在传统停车场管理效率和安全性大大滞后于社会的需要&#xff0c;给人们的生活带来了极大的不便。尤其&#xff0c;随着汽车…

二、MongoDB简介及基本操作

mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 mongodb也是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&…