一共写了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的题和解析相关推荐

  1. 2022年第十三届蓝桥杯大赛软件类国赛 C/C++ 大学B组

    试题 A: 2022 #include<bits/stdc++.h> using namespace std;typedef long long LL; LL dp[11][2023];i ...

  2. 2022第十三届蓝桥杯大赛软件赛省赛JavaC组真题

    [考生须知] 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为 4 小时.考试期间选手可浏览自己已经提交的答案,被浏览的答案允许拷贝.时间截止后,将无法继续提交或浏览答 ...

  3. 第十三届蓝桥杯大赛软件类国赛 C/C++ 大学B组 试题 G: 故障

    试题 G: 故障 贝叶斯公式 条件概率的运用,即发生A事件的条件下,B事件发生的概率. #include<cstdio> #include<cmath> #include< ...

  4. 2022年第十三届蓝桥杯大赛软件省赛Java学B组试题

    第十三届蓝桥杯大赛软件省赛Java学B组试题 一.试题截图 1. 星期计算 这道题是可以直接用笔算起来的,我算出来的答案是5,(2022整除7 余6,六天后就是星期五)但目前官方答案还不知道是什么? ...

  5. 2022年第十三届蓝桥杯大赛软件类决赛C/C++/Java/Python真题

    1.2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 2022年第十三届蓝桥杯大赛软件类决赛C/C++大学A组真题 - 题库 - C语言网 2. 2022年第十三届蓝桥杯大赛软件类决赛C/ ...

  6. 2022年蓝桥杯:第十三届蓝桥杯大赛软件赛省赛C/C++大学B组真题(考后回顾,文末附真题链接)

    目录 第十三届蓝桥杯大赛软件赛省赛C/C++大学B组真题(考后回顾) 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: ...

  7. 第十三届蓝桥杯大赛软件赛省赛真题

    第十三届蓝桥杯大赛软件赛省赛Java 大学 B 组 文章目录 第十三届蓝桥杯大赛软件赛省赛Java 大学 B 组 [考生须知] 试题 A: 星期计算 试题 B: 山 试题 C: 字符统计 试题 D: ...

  8. 第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组

    第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组 第十三届蓝桥杯大赛软件赛省赛 Python 大学 B 组 [考生须知] 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试 题. ...

  9. 第十三届蓝桥杯大赛软件赛省赛(b组c语言)

    试题 A: 九进制转十进制 本题总分:5 分 [问题描述] 九进制正整数 (2022)9 转换成十进制等于多少? 这道题没什么说的,2*9*9*9+0*9*9+2*9+2*1=1478: 试题 B: ...

最新文章

  1. linux rules.d文件
  2. 实验研究信标无线电能输出功率的因素
  3. 跳一跳j算法ava代码_DBSCAN聚类算法的理解与应用
  4. 【ABAP】Native SQL
  5. python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)...
  6. STM32开发 -- 蓝牙开发详解(1)
  7. C++回调函数是什么?
  8. python如何获取url中的内容_python怎么提取url中的参数
  9. 不属于python数据类型的是_Python不支持的数据类型有( )。
  10. java 网页应用 原理_【转载】Web应用工作原理
  11. iOS IM开发建议(一)App框架设计
  12. [USACO13OPEN]Luxury River Cruise【模拟】
  13. 利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行
  14. 《灌篮高手》——一部看了n遍的动漫
  15. 手机b站封面提取网站_【软件分享】B站视频提取器
  16. 嵌入式软件工程师自学之路
  17. 裴波那契数列的递归实现与非递归实现
  18. 一个屌丝程序猿的人生(一百二十三)
  19. 揭秘交换机市场内幕,“准工业级”猫腻你中招了吗?
  20. Matlab 网格剖分程序DistMesh函数指南

热门文章

  1. JWT JWS JWE三者区别
  2. sql语句choose/when/otherwise使用注意
  3. 思维导图:图模型的层次结构
  4. 全网最新最全的 HDFS 文件纠删码技术分析
  5. CHINAPLAS国际橡塑展落户深圳,扬帆启航踏新程
  6. python 数据拟合 预测_GitHub - wanng-ide/Python-WeChat-Predict: 用现有的数据对微信公众号的一些数据做一个预测,主要采用多项式拟合来构建模型。...
  7. java-net-php-python-jsp房屋出租网站-视频演示计算机毕业设计程序
  8. 南京大学本科、斯坦福博士、化学奥赛金牌得主 王庆根 人生反思
  9. 使用Python来分离或者直接抓取pcap抓包文件中的HTTP流
  10. python绘制heart