2022 第十三届蓝桥杯大赛软件赛省赛_PB python 大学 B 组 除了EFJ的题和解析
一共写了95分的题,和大家分享一下,没写EF勾,白给了55分,可惜
试题 A: 排列字母
感觉没啥好说的,就是签到
s = list(input()) s.sort() print(''.join(s))
试题 B: 寻找整数
就是再签一次,怎么说呢,就是把0到pow(10,17)依次检查,查到满足条件就break,反正就挂后台等着就行了。
modNum = [] for i in range(2,13):modNum_i = input().split()modNum.append([modNum_i[0], modNum_i[1]])modNum.append([modNum_i[2], modNum_i[3]])modNum.append([modNum_i[4], modNum_i[5]])modNum.append([modNum_i[6], modNum_i[7]]) # print(modNum) for i in range(1, pow(10,17)):iIsFind = Falsefor j in range(len(modNum)):if i % int(modNum[j][0]) != int(modNum[j][1]):breakif j == len(modNum) - 1:iIsFind = Trueif iIsFind:print(i)exit()
input:就是复制下题里的表格,然后等
2 1 14 11 26 23 38 37
3 2 15 14 27 20 39 23
4 1 16 9 28 25 40 9
5 4 17 0 29 16 41 1
6 5 18 11 30 29 42 11
7 4 19 18 31 27 43 11
8 1 20 9 32 25 44 33
9 2 21 11 33 11 45 29
10 9 22 11 34 17 46 15
11 0 23 15 35 4 47 5
12 5 24 17 36 29 48 41
13 10 25 9 37 22 49 46
试题 C: 纸张尺寸
可能就是动一下小脑瓜
A = {'A0' : [841, 1189], 'A1' : [594, 841], 'A2' : [420, 594], 'A3' : [297, 420],'A4' : [210, 297], 'A5' : [148, 210], 'A6' : [105, 148], 'A7' : [74, 105]} sA = input() print(A[sA][1]) print(A[sA][0])
试题 D: 数位排序
这题打算用一个list存放【num,num_sum】全用int,内存是2*sizeofint*nMax=8Mb
可能我觉得写的好的地方就是用了cache,比如说计算25568的位数和,就先在cache找5568的位数和在加2。这样时间复杂度小,过的概率高一点。
感兴趣的话呃呃,可以亲自试一下,我当时是赌命的,调用10000次cache和进行10000次类型转变再求和,是调cache更占优势
list0 = [i for i in range(100000)] print (datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]) for i in range(10000):a = list0[20056] print (datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])for i in range(10000):l = list(str(20056))a = int(l[0]) +int(l[1]) +int(l[2]) +int(l[3]) +int(l[4]) print (datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
代码比较长凑合看吧
n = int(input()) + 1 m = input() cache = [[i, i] for i in range(0,10)] # 注意,加入了[0] # print(cache) # 两位数 if n > 9:if n > 99:for i in range(10, 100):sum_i_ten = int(i/10)sum_i = sum_i_ten + cache[i % 10][0]cache.append([sum_i, i])else:for i in range(10, n):sum_i_ten = int(i/10)sum_i = sum_i_ten + cache[i % 10][0]cache.append([sum_i, i])if(n > 99): # 三位数if (n > 999): # 4位数for i in range(100, 1000):sum_i_ten = int(i/100)sum_i = sum_i_ten + cache[i % 100][0]cache.append([sum_i, i])else:for i in range(100, n):sum_i_ten = int(i/100)sum_i = sum_i_ten + cache[i % 100][0]cache.append([sum_i, i])if(n > 999): # 4位数if (n > 9999): # 5位数for i in range(1000, 10000):sum_i_ten = int(i/1000)sum_i = sum_i_ten + cache[i % 1000][0]cache.append([sum_i, i])else:for i in range(1000, n):sum_i_ten = int(i/1000)sum_i = sum_i_ten + cache[i % 1000][0]cache.append([sum_i, i])if(n > 9999): # 5位数if (n > 99999): # 6位数for i in range(10000, 100000):sum_i_ten = int(i/10000)sum_i = sum_i_ten + cache[i % 10000][0]cache.append([sum_i, i])else:for i in range(10000, n):sum_i_ten = int(i/10000)sum_i = sum_i_ten + cache[i % 10000][0]cache.append([sum_i, i])if(n > 99999): # 6位数if (n > 999999): # 7位数for i in range(100000, 1000000):sum_i_ten = int(i/100000)sum_i = sum_i_ten + cache[i % 100000][0]cache.append([sum_i, i])else:for i in range(100000, n):sum_i_ten = int(i/100000)sum_i = sum_i_ten + cache[i % 100000][0]cache.append([sum_i, i]) # if n == 1000000:cache.sort() print(cache[int(m)][1])
EF没写,感觉没时间了,直接rush硬菜了
试题 G: 全排列的价值
先简单介绍下数的价值,将n个数字随机排列后,数字m的前面有k个比m小的数字,k就是m的分数。题里说的挺明白的,,
简单介绍下思路,比如说有n个数字,进行全排列,有n!种排法,此时设n的所有排列价值为an。
向其中插入n+1,由于n+1大于其他数字,这个插入不会对其他数字的价值产生影响,但是会翻n+1倍。
比如n=2,12中插入3,会产生三个结果312、132、123。这个插入使得an的总价值翻了n+1倍,也就是an*(n+1)
向n个数字的排列中插入一个数字,有n+1种插法。这些插法中,由于n+1大于其他数字,n+1前有几个数字,n+1的价值就是几。分别为0,1,2...n。这些价值并不受排列的影响。在n!个排列中都可以这样插入,产生(0+1+2.。。+n)的价值。就是(0+1+2...+n)*n!。
a(n+1) = an*(n+1)+ (0+1+2...+n)*n!
然后就是代码:
可能写的有点混乱,因为昨晚猫在疯狂的叫。
第一次写的时候之间肌肉记忆for i in a, n,j in i+1,n:swap;dfs;swap
发现第二个用例都超市,然后就打算dp,突然想到了
n = int(input()) ansOfNum = 2 ans = 1 # a2 = 1 # a3 = a2 * 3 + (1+2)*2! = 9 # a4 = a3 * 4 + (1+2+3)*3! = 72 for i in range(ansOfNum, n ):Plus = 0for i in range(1, ansOfNum+1):Plus = (Plus + i) % 998244353culi = 1for i in range(1, ansOfNum+1):culi = (culi*i) % 998244353ans = (ans*(ansOfNum+1) + (Plus * culi)) % 998244353ansOfNum = ansOfNum + 1 print(ans)
试题 H: 技能升级
对于 60% 的评测用例,1 ≤ N ≤ 104 , 1 ≤ M ≤ 107;
对于所有评测用例,1 ≤ N ≤ 105,1 ≤ M ≤ 2 × 109,1 ≤ Ai , Bi ≤ 106。
这个就是每次找一个最大的Ai,然后用Bi修改Ai,别改成负的就行。
简单分析一下难点,对所有用例,AiBi全用int就够,10的5次方肯定不会超。
然后看看时间复杂度,每次找最大的Ai都要排序。考试的时候感觉这个应该是时间比较长,刚上网查了一下介于n log n和n之间,但是由于我们的list除了刚刚用过的Ai,其他的都是有序的,我们可以之间for循环遍历一次,pop出来,找到地方插入即可,时间复杂度介于0到n。这样就有可能不会被超市。
上代码
[n, m] = input().split() [n, m] = [int(n), int(m)] AB = [] att = 0 for i in range(n):ABi_str = input().split()AB.append([int(ABi_str[0]), int(ABi_str[1])])AB.sort(reverse=True) for i in range(m):# AB.sort(reverse=True)att = att + AB[0][0]if AB[0][0] - AB[0][1] < 0:AB[0][0] = 0else:AB[0][0] = AB[0][0] - AB[0][1]ABi = AB[0].copy()AB.pop(0)for j in range(1, n - 1):if AB[j][0]<ABi[0]:AB.insert(j-1, ABi.copy())breakelse:AB.insert(n, ABi.copy())break# print(AB) print(att)
试题 I: 最长不下降子序列
很经典的dp,是个考试原题改编,怎么说呢这种心情,补考 的时候老师把上次考试原卷拿来了。用我们班主任的话说,呃呃,我不好说了。
思路就是,先求最长子序列看看吧。
从dp矩阵倒着读,如果某个数字后面都是比他小的,那么dp【i】就=1。
如果这个数字可以和后面的数字组成最长不下降子序列,那么dp【i】=最大的最长不下降子序列+1
dp中的最大值即为所求,我当时居然忘了最大值,不想写了、之间贴代码了。
算了,简单说一嘴,定义dp连续k个数字的变化幅度:变化量/k,就是斜率,本次修改可以使这个幅度变为1,找个最小的就行了。
[n,k] = input().split() [n, k] = [int(n), int(k)] num = input().split() # 先写求最长不下降子序列方法,dpi = [0 for i in range(pow(10, 4) + 10)] def findNumjMax(dpi:list, j):Maxofj = 0for i in range(j+1, n):if num[i] >= num[j]:# print(len(dpi))if dpi[i] >= Maxofj:Maxofj = dpi[i]+1return max(Maxofj,1) def maxNotDeline(dpi):dpi[n-1] = 1for i in range(n,-1,-1):# print(i)dpi[i] = findNumjMax(dpi ,i) maxNotDeline(dpi)# 从num的n试到N - k位 min_k = k + 1 #最小坡度 for i in range(n-k+1):if dpi[i] - dpi[i + k - 1] < min_k:min_k = dpi[i] - dpi[i + k - 1] ans = dpi[0] + k - min_k print(ans)
那个班主任说,你要是这都不会,就要好好想想你,是不是不太适合这个
2022 第十三届蓝桥杯大赛软件赛省赛_PB python 大学 B 组 除了EFJ的题和解析相关推荐
- 2022年第十三届蓝桥杯大赛软件类国赛 C/C++ 大学B组
试题 A: 2022 #include<bits/stdc++.h> using namespace std;typedef long long LL; LL dp[11][2023];i ...
- 2022第十三届蓝桥杯大赛软件赛省赛JavaC组真题
[考生须知] 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为 4 小时.考试期间选手可浏览自己已经提交的答案,被浏览的答案允许拷贝.时间截止后,将无法继续提交或浏览答 ...
- 第十三届蓝桥杯大赛软件类国赛 C/C++ 大学B组 试题 G: 故障
试题 G: 故障 贝叶斯公式 条件概率的运用,即发生A事件的条件下,B事件发生的概率. #include<cstdio> #include<cmath> #include< ...
- 2022年第十三届蓝桥杯大赛软件省赛Java学B组试题
第十三届蓝桥杯大赛软件省赛Java学B组试题 一.试题截图 1. 星期计算 这道题是可以直接用笔算起来的,我算出来的答案是5,(2022整除7 余6,六天后就是星期五)但目前官方答案还不知道是什么? ...
- 2022年第十三届蓝桥杯大赛软件类决赛C/C++/Java/Python真题
1.2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 - 题库 - C语言网 2. 2022年第十三届蓝桥杯大赛软件类决赛C/ ...
- 2022年蓝桥杯:第十三届蓝桥杯大赛软件赛省赛C/C++大学B组真题(考后回顾,文末附真题链接)
目录 第十三届蓝桥杯大赛软件赛省赛C/C++大学B组真题(考后回顾) 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: ...
- 第十三届蓝桥杯大赛软件赛省赛真题
第十三届蓝桥杯大赛软件赛省赛Java 大学 B 组 文章目录 第十三届蓝桥杯大赛软件赛省赛Java 大学 B 组 [考生须知] 试题 A: 星期计算 试题 B: 山 试题 C: 字符统计 试题 D: ...
- 第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组
第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组 第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组 [考生须知] 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试 题. ...
- 第十三届蓝桥杯大赛软件赛省赛(b组c语言)
试题 A: 九进制转十进制 本题总分:5 分 [问题描述] 九进制正整数 (2022)9 转换成十进制等于多少? 这道题没什么说的,2*9*9*9+0*9*9+2*9+2*1=1478: 试题 B: ...
最新文章
- linux rules.d文件
- 实验研究信标无线电能输出功率的因素
- 跳一跳j算法ava代码_DBSCAN聚类算法的理解与应用
- 【ABAP】Native SQL
- python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)...
- STM32开发 -- 蓝牙开发详解(1)
- C++回调函数是什么?
- python如何获取url中的内容_python怎么提取url中的参数
- 不属于python数据类型的是_Python不支持的数据类型有( )。
- java 网页应用 原理_【转载】Web应用工作原理
- iOS IM开发建议(一)App框架设计
- [USACO13OPEN]Luxury River Cruise【模拟】
- 利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行
- 《灌篮高手》——一部看了n遍的动漫
- 手机b站封面提取网站_【软件分享】B站视频提取器
- 嵌入式软件工程师自学之路
- 裴波那契数列的递归实现与非递归实现
- 一个屌丝程序猿的人生(一百二十三)
- 揭秘交换机市场内幕,“准工业级”猫腻你中招了吗?
- Matlab 网格剖分程序DistMesh函数指南
热门文章
- JWT JWS JWE三者区别
- sql语句choose/when/otherwise使用注意
- 思维导图:图模型的层次结构
- 全网最新最全的 HDFS 文件纠删码技术分析
- CHINAPLAS国际橡塑展落户深圳,扬帆启航踏新程
- python 数据拟合 预测_GitHub - wanng-ide/Python-WeChat-Predict: 用现有的数据对微信公众号的一些数据做一个预测,主要采用多项式拟合来构建模型。...
- java-net-php-python-jsp房屋出租网站-视频演示计算机毕业设计程序
- 南京大学本科、斯坦福博士、化学奥赛金牌得主 王庆根 人生反思
- 使用Python来分离或者直接抓取pcap抓包文件中的HTTP流
- python绘制heart