蓝桥杯2020省赛python

news2025/1/13 11:53:20

蓝桥杯2020省赛Python

第一题:门牌制作

在这里插入图片描述

用了一个时间复杂度是n的算法,反正是填空题也不会出现TLE的事,只要别太离谱就行了。

利用python 的count函数

res = 0
for i in range(1,2021):
    i = str(i)
    res += i.count('2')
print(res)

答案是2

第二题:寻找2020

在这里插入图片描述

就一行一列的找吧,先遍历每一行,再遍历每一列,这样对于第i行,只要j+4 <= 总列数,就可以遍历矩阵的[i][j],[i][j+1]…[i][j+3],看看他是否等于2020

对于列的呢,只要当前的行数 i + 3 < 总行数 就可以更上面的一样遍历,行和列换一下而已

斜着的同样的,只要i + 3 < 总行数,j + 3 < 总列数

PS:j + 3 < 总列数 和j+4 <= 总列数是一样的,只不过第一个的时候下面要用到j+4 我就写j+4了

nums = [[2, 2, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0],
        [0, 0, 2, 2, 0, 2],
        [0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 2, 2],
        [0, 0, 2, 0, 2, 0],
        ]
res = 0
for i in range(len(nums)):  # 行
    for j in range(len(nums[0])): # 列
        if j + 4 <= len(nums[0]):   # 超出了
            a = nums[i][j:j+4]
            if a == [2,0,2,0]:
                res += 1
        if i+3 < len(nums):
            b = nums[i][j]*1000 + nums[i+1][j] * 100 + nums[i+2][j] *10 + nums[i+3][j] 
            if b == 2020:
                res += 1
        if i+3 < len(nums) and j+3 < len(nums[0]):
            c = nums[i][j] * 1000 + nums[i+1][j+1] * 100 +nums[i+2][j+2] * 10 + nums[i+3][j+3]
            if c ==2020:
                res += 1
print(res)

第三题:跑步锻炼

在这里插入图片描述

就判断呗,如果是周一或者月初,就 + 2 ,否则就加1,这里不用特殊考虑同时的情况,因为我们如果是周一的话或者月初的话都会直接continue,只会加一次2,python有专门的datetime库可以做这道题

import datetime
a = datetime.date(2000,1,1)
b = datetime.date(2020,10,2)

res = 0
while True:
    if a == b: break

    if a.day == 1:
        res += 2
        a = a + datetime.timedelta(days = 1)
        continue
    if a.isoweekday() == 1:
        res += 2
        a = a+datetime.timedelta(days = 1)
        continue
    res += 1
    a = a + datetime.timedelta(days = 1)

print(res)

4.蛇形填数

在这里插入图片描述

就填呗,如果i是偶数,就j从0到i-1 顺着填,否则就反过来

lst = [[] for _ in range(40)]
lst[0].append(1)
num=1
for i in range(2,40):
    if i % 2 == 0:
        for j in range(i):
            num += 1
            lst[j].append(num)
    else:
        for j in range(i):
            num += 1
            lst[i - j -1].append(num)
for i in range(len(lst)):
    print(i + 1, lst[i])
print(lst[19][19])

PS 我看了一下,直接找规律我估计也行

5.排序

在这里插入图片描述

这就需要了解一下冒泡排序的原理了,首先如果n个数全都倒着排的话,一共有 n-1 + n-2 + n-3 … + 1次要交换顺序

又因为他要最短的英文顺序,所以我们就先按逆序排,当有15个英文字母全都逆序的时候,总共要交换105次。又要字典序小,那就是o…a了。

接着又因为字典序小,所以我们尽量把小的往第一个放,同时满足交换100次,那就把j放到前面,这样前面五个单词就少跟j交换一次了,所以答案是

print('jonmlkihgfedcba')

第六题:成绩统计

在这里插入图片描述

这题就比较简单就不多说明了

if __name__ == '__main__':
    n = int(input())
    jige = 0
    youxiu = 0
    for i in range(n):
        m = int(input())
        if m >= 85:
            youxiu += 1
            jige += 1
        elif m >= 60:
            jige += 1

    print('{:.0f}%'.format((jige/n)*100)) 
    print('{:.0f}%'.format((youxiu/n)*100)) 

第七题:单词分析

在这里插入图片描述

最开始我感觉应该用count函数来做,但后面想想又要排字典序是有点麻烦的,我们就把他放到collections来做,里面的defaultdict(int)就可以用来计数,然后转化成字典

import collections
s = input()
dic = collections.defaultdict(int)  # 参数输int就可以计数
for i in s:
    dic[i] += 1
dic = dict(dic.items())
dic = sorted(dic.items(),key= lambda x:x[0], reverse=False)  # 先按字典序排 升序,排完就变成一个列表了
dic = sorted(dic, key = lambda x:x[1],reverse=True)          # 再按大小排,这样就都排好了 降序
print(dic[0][0])
print(dic[0][1])

第八题:数字三角形

在这里插入图片描述

最开始我看的时候我还以为是最基本的数字三角形,写完发现答案不对,我的是30,他是27,又看了遍题目发现他要求向左和向右次数之差不能超过1.

然后我又愚蠢的去写了一个,到达每一个顶点的向左向右的次数都不能超过1,发现还是不对,因为这样就限制了整体。他只要求到最后一行的时候,路径向左和向右的次数相差不能超过1

最后推了一遍,如果n是奇数,那么要到最后一行并且路径向左向右次数不能超过1的话,他只能到达中间那个。如果n是偶数,那么他只能到达中间两个(这个方法是过的了我去试了证明没问题)

# 如果符合要求的话 n 为奇数只有最后一行的中间点符合 偶数只有中间两个点符合
if __name__ == '__main__':
    n = int(input())
    f,a  = [[-1]*(n+1) for _ in range(n+1)],[[0] for _ in range(N)]
    

    for i in range(1,n+1):
        a[i] += [int(x) for x in input().split()]
    
    f[1][1] = a[1][1]
    for i in range(2,n+1): # 第i行
        for j in range(1,i+1):  # 第j列
            f[i][j] = max(f[i-1][j] + a[i][j], f[i-1][j-1] + a[i][j])

    if n % 2 == 0:
        res = max(f[n][n//2],f[n][n//2+1])
    else:
        res = f[n][n//2+1]

    print(res)

第九题:平面切分

在这里插入图片描述

这道题因为我之前pythontip 上面刷过,所以做起来不会感觉很难,就是找规律,如果后面加进来的线和前面的线有n个不同的交点,那么他就会多加n+1个平面

n = int(input())
lines = []
for i in range(n):
    a, b = map(int, input().split())
    lines.append((a, b))
lines = list(set(lines))  # 去重
def cross(line1,line2):  # 求交点
    A1,B1,A2,B2 = line1[0],line1[1],line2[0],line2[1]
    if A1 - A2 == 0: return # 返回NONE
    x = (B2 - B1) / (A1 - A2)
    y = A1 * x + B1
    x = round(x, 10)
    y = round(y, 10)
    return (x, y)
ci = [1] *(n+1)  # 第i条直接加入对答案的贡献,下标从0开始,默认那个1就已经加上了
node = set()
for i in range(1,n): # 从第二条线开始
    node.clear()
    for j in range(i):
        tmp = cross(lines[i],lines[j])
        if tmp == None: continue
        node.add(tmp)
    ci[i] += len(node)
print(sum(ci[:n])+1)   # 加上最开始其实是有两个平面,我们只算了一个

第十题:装饰珠

在这里插入图片描述

嗯最后一道题还是很有趣的,对于这种题我一般来说是只要能做出来就好,不考虑TLE。。所以我用了一种算是暴力的做法。

其实他并不在意六件装备是怎么样的,他只在意总共的孔数和等级以及所有珠子的等级和他的价值,那么我们先把所有装备的孔数和等级存储起来,

lv[i] 表示等级为i的物品的个数

limit[i]表示等级为i的珠子最后能放多少个

value[i][j]表示等级为i的珠子放了j个的价值

lv = [0]*5  # 表示等级为i的孔的数量
limit = [0]*5
value = [[0] for i in range(5)]
for i in range(6):
    a = list(map(int,input().split()))
    for i in range(1,len(a)):
        lv[a[i]] += 1  #等级为i的物品+1 
        m = int(input())
for i in range(m):
    zhu = list(map(int,input().split()))
    limit[zhu[0]] = zhu[1]              # limit[i] 表示等级为i的珠子最多镶嵌多少个
    value[zhu[0]] += zhu[2:]             # value[i][j] 表示等级为i的珠子用了j个的价值

好了现在都存好了,我们就开始遍历所有的可能性,

就遍历等级为4的珠子放i个 ,为3的珠子放j个,要注意的是,等级为4的珠子最多能放min(limit[4],lv[4])个,也就是不能超过等级4的珠子的限制和等级为4的装备的孔数量,等级为3的同理,只不过他可以放在等级为4和等级为3的装备孔中。

res = 0
# 对每个珠子的等级进行枚举
for i in range(min(lv[4],limit[4])+1):  # 等级为4的选i个
    for j in range(min(lv[3] + lv[4] - i,limit[3])+1):  # 等级为3的珠子能放进3和4的孔中
        for k in range(min(lv[4] + lv[3] + lv[2] -i -j,limit[2])+1):
            for l in range(min(lv[4] + lv[3] + lv[2] + lv[1] -i -j -k,limit[1])+1):
                res = max(res,value[4][i] + value[3][j] + value[2][k] + value[1][l])
        

print(res) 

完整代码如下

lv = [0]*5  # 表示等级为i的孔的数量
limit = [0]*5
value = [[0] for i in range(5)]
# print(summ)
for i in range(6):
    a = list(map(int,input().split()))
    for i in range(1,len(a)):
        lv[a[i]] += 1  #等级为i的物品+1 

m = int(input())
for i in range(m):
    zhu = list(map(int,input().split()))
    limit[zhu[0]] = zhu[1]              # limit[i] 表示等级为i的珠子最多镶嵌多少个
    value[zhu[0]] += zhu[2:]             # value[i][j] 表示等级为i的珠子用了j个的价值
res = 0
# 对每个珠子的等级进行枚举
for i in range(min(lv[4],limit[4])+1):  # 等级为4的选i个
    for j in range(min(lv[3] + lv[4] - i,limit[3])+1):  # 等级为3的珠子能放进3和4的孔中
        for k in range(min(lv[4] + lv[3] + lv[2] -i -j,limit[2])+1):
            for l in range(min(lv[4] + lv[3] + lv[2] + lv[1] -i -j -k,limit[1])+1):
                res = max(res,value[4][i] + value[3][j] + value[2][k] + value[1][l])
        

print(res)

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

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

相关文章

【目标检测论文解读复现NO.26】基于改进YOLOv5s网络的实时输液监测

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

115、【回溯算法】leetcode ——216.组合总和III:回溯法+剪枝优化(C++版本)

题目描述 原题链接&#xff1a;216.组合总和III 解题思路 整体回溯法思路类似于 77. 组合&#xff08;回溯法剪枝优化&#xff09;&#xff0c;与之不同的是&#xff0c;需要多一个相加和为n的判定条件&#xff0c;可以让每次传入数的时候进行n - i&#xff0c;直至找到n 0时…

CAPBase理论

一、CAP 理论CAP 理论指出对于一个分布式计算系统来说&#xff0c;不可能同时满足以下三点&#xff1a;一致性&#xff1a;在分布式环境中&#xff0c;一致性是指数据在多个副本之间是否能够保持一致的特性&#xff0c;等同于所有节点访问同一份最新的数据副本。在一致性的需求…

英飞凌TC3xx系列介绍01-GTM系统介绍

本文框架1. 本系列前言2. GTM模块系统介绍2.1 GTM模块常用缩略语3. 系列介绍规划1. 本系列前言 英飞凌TC3xx是英飞凌AURIX 2G系列单片机&#xff0c;该系列单片机是32位微控制器&#xff0c;具有多个TriCore CPU、程序及数据存储器、总线、中断系统、DMA及功能强大的外围设备。…

linux基本功系列之su命令

文章目录一. su命令介绍二. 语法格式及常用选项三. 参考案例3.1 切换到root用户3.2 切换到指定用户3.3 不切换成root&#xff0c;但执行root才能执行的命令总结前言&#x1f680;&#x1f680;&#x1f680; 想要学好Linux&#xff0c;命令是基本功&#xff0c;企业中常用的命令…

【MySQL】第十部分 常用的聚合函数

【MySQL】第十部分 常用的聚合函数 文章目录【MySQL】第十部分 常用的聚合函数10. 常用的聚合函数10.1 MIN和MAX函数10.2 COUNT函数10.3 AVG和SUM函数10.4 GROUP BY10.5 HAVING总结10. 常用的聚合函数 定义: 对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&…

英语学习打卡day5

2023.1.25 1.aqua n.水;溶液;浅绿色 The construction of underground aqua storage tank 地下水储罐的建设 2.do sth for dear life 拼命做某事 If you do something for dear life, you do it with as much effort as possible, usually to avoid danger. 3. 4.swoop …

vue-grid-layout数据可视化图表面板优化过程所遇问题汇总

对于drag事件不熟悉的&#xff0c;请先阅读&#xff1a;《drag事件详解&#xff1a;html5鼠标拖动排序及resize实现方案分析及实践》之前老项目grafana面板&#xff0c;如下图所示&#xff08;GEM添加图表是直接到图表编辑&#xff0c;编辑完成后自动插入到面板最后&#xff09…

Flume集群安装部署、Kafka集群安装部署以及Maxwell安装部署实战

1、Flume集群安装部署 1.1、安装地址 Flume官网地址&#xff1a;http://flume.apache.org/文档查看地址&#xff1a;http://flume.apache.org/FlumeUserGuide.html下载地址&#xff1a;http://archive.apache.org/dist/flume/ 1.2、安装部署 将apache-flume-1.9.0-bin.tar.…

Redis实现笔记点赞排行榜 | 黑马点评-达人探店

一、发布探店笔记 探店笔记类似点评网站的评价&#xff0c;往往是图文结合。对应的表有两个 探店笔记表&#xff08;主键、商户id、用户id、标题、文字、图片、探店文字描述、点赞数量、评论数量&#xff09;评价表&#xff08;笔记的评价&#xff09;先上传图片请求一次保存…

【Java基础】--Java排序

【Java基础】--Java排序1、选择排序(Select Sort)2、冒泡排序(Bubble Sort)3、插入排序(Insert Sort)4、希尔排序(Shell Sort)5、归并排序(Merge Sort)6、快速排序(Quick Sort)7、堆排序(Heap Sort)小结待排序的元素需要实现 Java 的 Comparable 接口&#xff0c;该接口有 com…

Facebook SEO中参与度的重要性

参与度&#xff0c;也就是大家所说的浏览量&#xff0c;在 Facebook SEO中也叫做页面访问者参与度。一般来说&#xff0c; Facebook的用户在上面停留的时间越长代表着它在用户心目中的形象越好&#xff0c;这也是为什么 Facebook上的访客愿意打开自己的 Facebook页面让好友帮忙…

使用vite构建vue3项目详细介绍(ts+pinia+sass+vue-router+axios+element-plus)

使用vite构建vue3项目详细介绍(tspiniasassvue-routeraxioselement-plus) 1. 创建项目 npm init vitelatest 2. 配置 vite.config.ts path需要安装--npm install types/node --save-dev import vue from vitejs/plugin-vue; import { resolve } from path; import { defineC…

Jupyter的安装与默认目录的切换

下载与安装 清华大学开源软件镜像站 使用国内镜像下载更快&#xff0c;官网下载很慢 下载msi镜像文件&#xff0c;打开安装&#xff1a; 安装完成后得到4个文件 Reset Spyder...和Anaconda Powershell....都是相应的配置&#xff0c;其中后者是Jupyter和anaconda的dos命令窗口…

Coolify系列02-从0到1超详细手把手教你上手Coolify

重启 如果由于某种原因&#xff0c;你的实例崩溃了&#xff0c;你可以用下面的命令重新启动它: wget -q https://get.coollabs.io/coolify/install.sh \ -O install.sh; sudo bash ./install.sh -r防火墙设置 您需要在防火墙中允许以下端口 Coolify: 3000 (required)Revers…

【Mysql】Mysql的存储引擎

【Mysql】Mysql的存储引擎 文章目录【Mysql】Mysql的存储引擎1.概述2. 特点2.1 InnoDB2.2 MyISAM2.3 Memory2.4 区别3. 选择1.概述 **存储引擎&#xff1a;存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。**存储引擎是基于表的&#xff0c;而不是 基于库的&…

HTTPS工作原理详解加密(TLS握手)过程

HTTPS概念 HTTPS就是一个有安全保障的HTTP通信&#xff0c;我们都知道&#xff0c;http是明文传输的&#xff0c;http报文是人肉眼就可识别的ASCII码&#xff0c;在通信过程中&#xff0c;http报文很容易被黑客窃听、篡改、伪造&#xff0c;而在互联网交易中&#xff0c;我们必…

【1】初识Linux

学习笔记目录 学习教程&#xff1a;B站 “黑马程序员” 初识Linux--入门Linux基础命令--会用Linux权限管控--懂权限Linux实用操作--熟练实战软件部署--深入掌握脚本&自动化--用的更强项目实战--学到经验云平台技术--紧跟潮流 操作系统概述 1.计算机由硬件和软件两个主要…

AcWing 12. 背包问题求具体方案

AcWing 12. 背包问题求具体方案AcWing 12. 背包问题求具体方案&#xff08;1&#xff09;问题&#xff08;2&#xff09;分析&#xff08;3&#xff09;代码AcWing 12. 背包问题求具体方案 &#xff08;1&#xff09;问题 &#xff08;2&#xff09;分析 我们先看一下这道题中…

tomcat更改默认端口

如下图把conf目录下的server.xml的下图所示处由原来的8080改为需要的即可&#xff1b;当前改为8087&#xff1b;保存之后重启tomcat&#xff1b; 网上一个资料说如果要运行2个tomcat&#xff0c;把下图的8009改为自己的&#xff0c;例如18009&#xff0c; 把下图的8005改为自己…