2022蓝桥杯A组Python

2023-11-17

更新,江苏赛区省一,昨天特别高兴,今天有点高兴,后续会继续更新动态规划的部分;国赛最近也在刷题但有点懒得写博客了,事情有点多。

-----------------2022.04.29--------------------------------

蓝桥杯开始啦

还有七分钟就到九点了,心情有点激动,复习不进去,发个博客吧。

-------------------2022.04.09 7:54-------------------------

目前我做出来的答案,不保真,后期会更新正确答案(如果我能知道的话),同时也欢迎大家一起更正。

1.裁纸刀(5分)

 这个题没有解题思路,但是考虑了三种情况:全横着切、全竖着切、横一刀竖一刀(横着切还是竖着切取决于哪一刀切的长)。发现结果一样,都是443.

2.寻找整数(5分)

 这个题我没做出来,跑不出来。但是群里有人猜是2022040920220409,正好十六位,对方验证答案是对的。多说一句,往年也有这种题,答案和日期相关,但是我第一次参加,没有这种蒙题经验,下次一定试试。

3.质因数个数 时间限制: 10.0s 内存限制: 512.0MB (10分)

思路:先找出n所有的约数,再判断这个约数是否为质数。 

代码测试结果:我试了一个999999998大概只跑了三四秒;试了一个561876588= 2*2*3*3*3* 7*13*17*57*59大概跑了十几秒。所以10^9有一定的通过率,但是不能完全通过。

n=eval(input())
ls=[]
t=0

def isz(x):   #判断是否为质数
    if x%2==0:
        return False
    else:
        for i in range(3,x//2+1,2):
            if x%i==0:
                return False
        return True

for i in range(5,n//2+1,2):  #判断是否为约数
    if n%i==0:
        ls.append(i)
for i in ls:
    if isz(i):
        t+=1

if n%2==0:
    if n%3==0:
        print(t+2)
    else:
        print(t+1)
elif n%3==0:
    print(t+1)
else:
    print(t)

 4. 矩形拼接 时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分

 

 思路:首先,这个题的答案只有三个可能:4、6、8。

为了先拿到这个10%,我先判断了一下a1=a2=a3.

然后判断4:三个矩形中,各存在一条边xi(i=1,2,3) ,使得x1=x2=x3;或者三个矩形中存在两个矩形1,2,各存在一条边相等x1=x2,这两个矩形的另外一条边相加y1+y2和=最后一个矩形的其中一条边x3(y3)。

判断6:三个矩形中存在两个矩形1,2,各存在一条边相等x1=x2,这两个矩形的另外一条边相加y1+y2和!=最后一个矩形的其中一条边x3(y3)。

判断8:剩下的情况。

这个光代码就写了好久,除了题目案例无测试。

def xiangdeng1(l1,l2,l3):
    flag=0
    for i in l1:
        for j in l2:
            for k in l3:
                if i==j:
                    if j==k:
                        return 2
                    else:
                        for q in l3:
                            if sum(l1)-i+sum(l2)-j==q:
                                return 2
                        flag=1
                elif i==k:
                    for q in l2:
                        if sum(l1)-i+sum(l3)-k==q:
                            return 2
                    flag=1
                elif j==k:
                    for q in l1:
                        if sum(l2)-j+sum(l3)-k==q:
                            return 2
                    flag=1
    if flag:
        return 3
    else:
        return 0

def xiangdeng2(l1,l2,l3):
    for i in l1:
        for j in l2:
            for k in l3:
                if i+j==k or i+k==j or j+k==i:
                    return 6
    return 8
                
    
T=eval(input())
res=[]
for i in range(T):
    s=input().split()
    a1,b1,a2,b2,a3,b3=map(int,s)
    ls=[a1,b1,a2,b2,a3,b3]
    l1=[a1,b1]
    l2=[a2,b2]
    l3=[a3,b3]
    S=a1*b1+a2*b2+a3*b3
    if a1==a2 and a2==a3:
        res.append(4)
    elif 0 not in [S%x for x in ls]:
        res.append(8)
    elif xiangdeng1(l1,l2,l3)!=0:
        res.append(xiangdeng1(l1,l2,l3)*2)
    else:
        res.append(xiangdeng2(l1,l2,l3))

for i in range(T):
    print(res[i])

5.消除游戏 时间限制: 3.0s 内存限制: 512.0MB 本题总分:15 分

思路:先审题,一定是有重复的字符(2个及以上)和不一致的字符才需要删除。

第一步:判断结束:全是一样的或者全是不重复的(不重复表示两个连续的字符不重复,aba这样的重复是可以的)。

删除:我用的是连续的三个字符判断,如果有abb或者aab的情况就删。删除使用的是判断,不能直接删,直接删影响索引。

代码测试:超级快,感觉一秒就出结果了,不知道是不是我的测试用例有问题。

def isok(s):
    if len(s)<=2:
        return False
    else:
        f=1  #判断是否全相等1
        g=1 #判断是否全不想等1
        for i in range(len(s)-1):
            a,b=s[i],s[i+1]
            if ord(a)-ord(b)==0:
                g=0
            else:
                f=0
        if g or f:
            return False
        else:
            return True
        
s=input()
while(isok(s)):
    ls=[1 for i in s]
    for i in range(len(s)-2):
        a,b,c=s[i],s[i+1],s[i+2]
        if a==b and b!=c:
            ls[i+1],ls[i+2]=0,0
        if a!=b and b==c:
            ls[i],ls[i+1]=0,0
    t=''
    for i in range(len(s)):
        if ls[i]==1:
            t+=s[i]
    s=t
if s=='':
    print('EMPTY')
else:
    print(s)

6.重新排序 时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分

 

 思路:先把每个位置取数的次数求出来,然后把次数和数字的数列分别排序一下,然后两两相乘即得查询结果总和的最大值。减掉原值即可。

这个不好测试,需要的数字太多了。但是我觉得这个思路应该已经很简单了。

n=eval(input())
s=input().split()
A=list(map(int,s))
m=eval(input())
od=[0 for i in range(n)] #保存次数

sum_y=0
sum_x=0
for i in range(m):
    a,b=map(int,input().split())
    for i in range(a-1,b):
        sum_y+=A[i]
        od[i]+=1

A.sort()
od.sort()
for i in range(n):
    sum_x+=A[i]*od[i]
print(sum_x-sum_y)

7.试题 G: 全排列的价值 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

 

 思路:(半猜半对吧)解题角度:每个数字前面的比它小的数字出现的次数。

解释一下图片:因为1是最小的数字,所以1前面出现比它还小的数字的次数为0;

2:比2小的只有1,然后在3!次排序中,1在2前面的可能性为1/2,所以次数就是1/2*3!;

3:比2小的有1,2(2个数字),在3!次排序中,可能性1/2*2,次数就是2/2*3!。

代码测试:例题n=2022答案不到一秒就出来了,估计可以全通过吧。

 

n=eval(input())
res=1
for i in range(1,n+1):
    res*=i
print((res*n*(n-1)//4)%998244353)

8. 试题 H: 最长不下降子序列 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

 

 

考场上没做出来。 

其实在省赛之前我就简单的学了一下动态规划的,但是考试的时候压根没想起来这个题可以用dp,非常伤心,学的还不牢固。所以我又复习了一下,给出我的思路。目前我有两种思路,但是感觉时间复杂度都不低(dp时间复杂度本身也不低)。

【dp需要一定的基础,求固定数列的数列的最长不下降序列的思路我没有写,可以参考其他的博客,因为求单调序列是非常经典的dp,所以介绍的博客非常多,如果找不到可以参考我的动态规划的博客】

1.分段法:思路参考了这个博客,但是做法没有用那个权值线段树(我不会,看起来也颇为复杂)。2022年蓝桥杯省赛 C/C++ A组题解_傅志凌的博客-CSDN博客

 2.遍历法:先把K个数字“拿出来”,然后求剩下的数列的最长不下降序列(dp),取最大值+K即为答案。

这两种方法的时间复杂度都颇高,大概是O(n^3),但是我没找到更简单的算法,但是好像dp有优化的空间,待我学习一下再补充。

#思路1:分段法
def dpxn(ls):   #求以ls[-1]为结尾 的最长不下降序列 的长度----常规代码
    if ls==[]:
        return 0
    n=len(ls)
    dp=[1 for i in range(n)]
    for i in range(n):
        for j in range(0,i):
            if ls[i]>=ls[j]:
                dp[i]=max(dp[i],dp[j]+1)
    return dp[-1]

def dpx0(ls,x0):    #求以x0为开头的 最长不下降序列 的长度----略作修改
    if ls==[]:
        return 0
    n=len(ls)
    dp=[]
    for i in ls:
        if i>=x0:
            dp.append(1)
        else:
            dp.append(0)
    for i in range(n):
        for j in range(0,i):
            if ls[i]>=ls[j] and ls[j]>=x0:
                dp[i]=max(dp[i],dp[j]+1)
    return max(dp)

n,k=map(int,input().split())
ls=list(map(int,input().split()))
res=[]
for i in range(n):
    if i+k<n:
        x0=min(ls[i],ls[i+k])
        res.append(dpxn(ls[:i])+k+dpx0(ls[i+k:],x0))
    else:
        x0=ls[i]
        res.append(dpxn(ls[:i])+n-i-k+1)
print(max(res))
#思路2:遍历法
#===按道理说两种思路在时间复杂度相同的情况下应该会选择更简单的做法,但是我没有找到有类似思路2的做法===
def dpx(ls):   #常规dp代码
    if ls==[]:
        return 0
    n=len(ls)
    dp=[1 for i in range(n)]
    for i in range(n):
        for j in range(0,i):
            if ls[i]>=ls[j]:
                dp[i]=max(dp[i],dp[j]+1)
    return max(dp)

n,k=map(int,input().split())
ls=list(map(int,input().split()))
res=[]
for i in range(n-k):
    l1=ls[:i]
    l2=ls[i+k:]
    l1.extend(l2)
    res.append(dpx(l1))
print(max(res)+k)
#print(res)

我在这个蓝桥杯的训练系统上找到题目了,果然就是说时间超额了【烦】。有做对的大佬捞捞。

9.试题 I: 最优清零方案 时间限制: 5.0s 内存限制: 512.0MB 本题总分:25 分

 

没思路。 

 10.试题 J: 数的拆分 时间限制: 5.0s 内存限制: 512.0MB 本题总分:25 分

 

 

 本质上也没有思路,但是这个题可以用笨办法,于是我就用了笨办法。

import math
n=eval(input())

res=[]
ls=[]
for i in range(n):
    ls.append(eval(input()))

m=max(ls)
lt=[1]
for i in range(2,int(m**0.5)+1):
    for j in range(2,int(math.log(m,i))+1):
        lt.append(i**j)
for i in ls:
    for j in lt:
        if i%j==0 and i//j in lt:
            res.append('yes')
            break
        if i<j:
            res.append('no')
            break
    else:
        res.append('no')

for i in res:
    print(i)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2022蓝桥杯A组Python 的相关文章

  • 蓝桥杯跑步锻炼

    问题描述 小蓝每天都锻炼身体 正常情况下 小蓝每天跑 1 千米 如果某天是周一或者月初 1 日 为了 激励自己 小蓝要跑 2 千米 如果同时是周一或月初 小蓝也是跑 2 千米 小蓝跑步已经坚持了很长时间 从 2000 年 1 月 1 日周六
  • 蓝桥杯第十一届青少年Python组省赛试题

    选择题答案 ADDCA s input if s 2 er or s 2 ly s s 2 elif s 3 ing s s 3 print s n int input cnt 0 for i in range 2 n s 0 for j
  • 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。并排序[c实现]

    void merge int nums1 int nums1Size int m int nums2 int nums2Size int n int end1 m 1 int end2 n 1 int end n m 1 while end
  • 计蒜客T1113——整理药名

    先看题干 这道题并不难 如果你对编程语言的基础有很好的掌握 很容易理清整个逻辑 实际上 不涉及到算法的题目都是简单题 笔者带领大家理一下这道题的考察点 1 输入多个不定长字符串 2 将字符串的首字母一律变为大写 分本来就是大写和本来是小写两
  • 蓝桥杯 辗转相除法---求最大公约数

    1 例子 例如 求 319 377 319 377 0 余319 319 377 377 319 377 319 1 余58 377 319 319 58 319 58 5 余29 319 58 58 29 58 29 2 余0 58 29
  • 蓝桥杯:基础练习 特殊回文数(java实现)

    问题描述 123321是一个非常特殊的数 它从左边读和从右边读是一样的 输入一个正整数n 编程求所有这样的五位和六位十进制数 满足各位数字之和等于n 输入格式 输入一行 包含一个正整数n 输出格式 按从小到大的顺序输出满足条件的整数 每个整
  • openGL之API学习(一九四)glGenTextures glActiveTexture

    glGenTextures产生的是一个比较小的整数id 纹理单元名 glActiveTexture激活的是纹理单元号 GL TEXTUREi 它们二者的关系为GL TEXTUREi GL TEXTURE0 id glBindTexture使
  • 蓝桥杯单片机组——程序框架及客观题

    文章目录 前言 程序框架 main 中断 两段式代码结构 单片机运行流程 代码风格 客观题 总结 目录 前言 前面两篇主要是介绍了蓝桥省赛的一些参赛技巧 此篇主要是分享程序框架和一些客观题的链接 程序框架 蓝桥的评分是综合了效果和代码步骤的
  • 备战2023蓝桥国赛-饼干

    题目描述 解析 这道题我想了很多种解决方法 但无一例外都失败了 实在是按照常规线性DP的思路真的想不出来 看了题解之后才知道它是分为三步解决这个问题的 第一步 缩小最优解的范围 先用贪心将最优解缩小到某个较小的范围内 再DP求出精确的最优解
  • C++11 删除 字符串中的空格

    include
  • 对象的初始化和清理(构造和析构函数)

    对象的初始化和清理 1 1 构造函数 1 1 1 没有返回值 没有void 类名相同 可以发生重载 1 2 构析函数 1 2 1 没有返回值 没有void 函数名称 类名 不可以发生重载 不可以有参数 1 3 系统会默认调用 构造函数和析构
  • 第十三届蓝桥杯省赛 JAVA A组 - 矩形拼接

    个人博客 https blog csdn net Newin2020 spm 1011 2415 3001 5343 专栏地址 蓝桥杯题解集合 专栏定位 为想参加蓝桥杯的小伙伴整理常考算法题解 祝大家都能取得理想成绩 如果有收获的话 欢迎点
  • SEGGER_RTT_printf()函数实现打印浮点、负数-示例

    概述 最近公司项目换另一款gsensor 用到了浮点数打印 又不想使用串口来打印数据 在此做个笔录 通过修改源码方式实现 一 修改源码 1 在 SEGGER RTT printf c 中 的 int SEGGER RTT vprintf u
  • Python蓝桥杯 基础练习 十六进制转八进制

    def huan n n format int n 16 o print n x int input for i in range 1 x 1 n input huan n format o 将数据格式化为八进制 int n 16 返回字符
  • 树与二叉树(二叉树的表示,性质,遍历,还原)

    1 基本术语 A 或B 是I的祖先 I是A 或B 的子孙 D是I的双亲 I是D的孩子 节点的孩子个数称为节点的度 树中节点的最大度数称为树的度 度大于0的节点称为分支节点 度等于0的节点称为叶节点 定义树根为第一层 则 树的深度 高度 为5
  • 三个小朋友分糖果

    题目描述 有甲 乙 丙三个小朋友 甲有x粒糖果 乙有y粒糖果 丙有z粒糖果 现在他们做一个游戏 从甲开始 将自己的糖平均分三份 自己留一份 其余两份分别给乙与丙 多余的糖果自己吃掉 然后乙与丙也依次这样做 问最后甲 乙 丙三人各有多少粒糖果
  • 2023蓝桥杯python 组试题A:2023

    题目 请求出在 12345678 至 98765432 中 有多少个数中完全不包含 2023 完全不包含 2023 是指无论将这个数的哪些数位移除都不能得到 2023 例如 20322175 33220022 都完全不包含 2023 而 2
  • 七段码(建图+搜索+并查集)

    思路 step1 邻接表建图 相邻为1 不相邻为0 题目就等价为在图中求连通子图的个数 step2 深度搜索每条边 并存储下来 step3 对选择的边用并查集保存下来 然后看father i i的个数 等于1 表示连通 否则表示不连通 易错
  • 多少个X 蓝桥杯模拟

    问题描述 给定一个字母矩阵 一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成 四条 线段的长度相同 而且四条线段上的字母和中心点的字母相同 一个 X图形可以使用三个整数 r c L 来描述 其中 r c 表示中心点位于第
  • 判断完全数-第11届蓝桥杯省赛Python真题精选

    导读 超平老师的Scratch蓝桥杯真题解读系列在推出之后 受到了广大老师和家长的好评 非常感谢各位的认可和厚爱 作为回馈 超平老师计划推出 Python 蓝桥杯真题解析100讲 这是解读系列的第27讲 判断完全数 本题是2020年6月20

随机推荐

  • 分治法篇:卷一:最简单的分治法应用例子

    2023年4月25日 周二早上 我想从最简单的分治法应用例子开始 而不是从经典的例子开始 用分治法求解数组中的最大值 纯享版 include
  • 《基于 Vue 组件库 的 Webpack5 配置》6.将字体库和图片等静态资料,编译后打包至指定文件夹

    参考 Rule generator filename package json 的配置如下 module exports module test png svg jpg jpeg gif i type asset resource gene
  • 【C语言-进阶】指针进阶

    1 字符指针 字符指针的基本使用略了 把常量字符串 abcdef 的首元素地址放在字符型指针p中 p中存储的就是字符a的地址 而因为他们是在内存中连续存储的 且字符串末尾有自动添加到 0 所以可以用printf形式打印出来 这时如果用指针p
  • C++复习笔记--STL的常见遍历、查找和排序算法的使用

    目录 1 STL常用算法的概述 2 常用遍历算法 2 1 for each 2 2 transform 3 常用查找算法 3 1 find 3 1 1 查找内置类型元素 3 1 2 查找自定义类型元素 3 2 find if 3 2 1 查
  • unity3d IK动画

    IK动画 反向动力学 Inverse Kinematics 就是反过来的呗 即用物体带动骨骼运动 IK动画绑定 void OnAnimatorIK int layerIndex 看向准星 if front sign null animato
  • bootstrap使用之stickUp(固定导航栏)

    1 stickUp是jQuery下的一个导航栏插件 当界面较长时 导航栏会固定在顶部 不会移动 如下图 2 废话少说 下载http www bootcss com p stickup 在里面有示例文档 只是注意看index的时候js写在下面
  • 2 QT—资料文件管理 动作使用设置快捷键

    图标文件下载 https wwa lanzoui com iiZODwjcsbc 项目文件下载 https wwa lanzoui com is9N5wjct3a 1 创建主窗口菜单 1 新建 Qt Widgets 应用 项目名称为 myM
  • JAVA读取USB扫描枪

    利用JAVA程序获取扫描枪的数据 package barcode import java util concurrent BlockingQueue import java util concurrent LinkedBlockingQue
  • Vue实战项目开发--Vue中的动画特效

    项目的源代码在GitHub上 点击查看 目录 vue中的css动画原理 在Vue中使用Animate css库 在Vue中同时使用过渡属性和动画 Vue中的Js动画与Velocity js的结合 Vue中多个元素或组件的过渡 vue中的列表
  • 基于深度学习的高精度人体摔倒行为检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要 基于深度学习的高精度人体摔倒行为检测识别系统可用于日常生活中或野外来检测与定位人体摔倒行为目标 利用深度学习算法可实现图片 视频 摄像头等方式的人体摔倒行为目标检测识别 另外支持结果可视化与图片或视频检测结果的导出 本系统采用YOLO
  • android 对话框学习

    首先需要创建ProgressDialog对象 然后使用线程控制进度条显示 具体源代码 view source print 001 package com yarin android TestOnPDialog 002 003 import
  • hdu 1080 Human Gene Functions

    Problem acm hdu edu cn showproblem php pid 1080 Meaning 给出一个二维表 similarity 表示对应核苷酸配对时的相似度值 横杠 表示用空格代替一个核苷酸 给出两个DNA序列 a 和
  • PCB添加图片或logo的方法

    系列文章目录 1 元件基础 2 电路设计 3 PCB设计 4 元件焊接 6 程序设计 文章目录 前言 一 图片预处理 转为 BMP格式 二 给Altium designer安装PCB LOGO Creator脚本插件 三 给PCB添加图片或
  • 【读书笔记->数据分析】BDA教材《数据分析》书籍介绍

    BDA教材 数据分析 书籍介绍 BDA BDA数据分析职业技能等级 旨在培养基于数据分析理论 计算机技术以及行业案例应用 三维一体 的大数据分析人才 培养数据管理 数据分析 数据挖掘 数据洞察方面的复合型和应用型专业人才 BDA数据分析师证
  • stm32霍尔编码器电机测速原理

    本次选用的编码器电机为13线的霍尔编码器电机 电机减速比为30 1 转动一圈输出13 30 390个脉冲 轮胎直径为75mm 轮胎周长为pi d 3 75 225mm 定时器采用四倍频计数 则一圈输出390 4 1560个脉冲 具体编码器知
  • Python基础 第3课

    Python基础 3 函数 独立定义 独立调用 def foo pass foo 方法 依赖定义 依赖调用 方法存在于类的内部 1 变量作用域 全局 本地 闭包 局部 全局 global一般在函数体外定义的变量成为全局变量 在函数内部定义的
  • QT笔记- QString字符串左右截取——left() 和 right()

    left int n 从左向右截取n个字符串 right int n 从右向左截取n个字符串 注 第二个参数是一个索引 表示函数的目标字符串是该索引之前的字符串
  • VUE(未写完)

    文章目录 一 如何学习VUE 二 VUE的概念 三 MVVM MV 四 如何使用VUE Vue的指令的操作 v 都是代表指令 回忆 filter 五 json server 六 生命周期 8个 七 watch 监听 八 computed 计
  • Opening a specific View directly from the SiteMap in Dynamics

    Opening a specific View directly from the SiteMap in Dynamics CRM Consultancy Blog Dynamics 365 Unified User Interface D
  • 2022蓝桥杯A组Python

    更新 江苏赛区省一 昨天特别高兴 今天有点高兴 后续会继续更新动态规划的部分 国赛最近也在刷题但有点懒得写博客了 事情有点多 2022 04 29 蓝桥杯开始啦 还有七分钟就到九点了 心情有点激动 复习不进去 发个博客吧 2022 04 0