十三届蓝桥杯pythonB组
- 1.排列字母
- 2.寻找整数 ×
- 3.纸张尺寸
- 4.数位排序
- 5.蜂巢 ×
- 6.消除游戏 ×看已交的全过题解
- 7.全排列的价值
- 8.技能提升×
- 9.最长不下降序列×
- 10.最优清零方案
1.排列字母
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。小蓝要把一个字符串中的字母按其在字母表中的顺序排列。例如,LANQIAO 排列后为 AAILNOQ。又如,GOODGOODSTUDYDAYDAYUP 排列后为AADDDDDGGOOOOPSTUUYYY。请问对于以下字符串,排列之后字符串是什么?WHERETHEREISAWILLTHEREISAWAY运行限制最大运行时间:1s最大运行内存: 512M
string = input()dict = {}for s in string:if s not in dict.keys():dict[s]=1else:dict[s]+=1dict2 = sorted(dict.items())# print(dict2)for i in range(len(dict2)):for j in range(dict2[i][1]):print(dict2[i][0],end="")
s = str(input())#这个快很多in2 = list(s)in2.sort()for i in in2:print(i,end="")
2.寻找整数 ×
问题描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。有一个不超过 10^{17}1017的正整数 nn,知道这个数除以 2 至 49 后的余数如下表所示,求这个正整数最小是 多少。图片描述运行限制最大运行时间:1s最大运行内存: 512M
3.纸张尺寸
问题描述在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm \times× 841mm,将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm \times× 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。输入纸张的名称, 请输出纸张的大小。输入格式输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。输出格式输出两行,每行包含一个整数,依次表示长边和短边的长度。样例输入1A0copy样例输出11189841copy样例输入 2A1copy样例输出 2841594copy运行限制最大运行时间:1s最大运行内存: 512M
ask = input()a = int(ask[1])# print(a)l = 1189w = 841if a==0:print(l)print(w)else:for i in range(a):tmp = l//2l = max(tmp,w)w = min(tmp,w)print(l)print(w)
4.数位排序
问题描述小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位 之和 13 。又如, 6 排在 2022 前面, 因为它们的数位之和相同, 而 6 小于 2022 。给定正整数 n, mn,m, 请问对 1 到 nn 采用这种方法排序时, 排在第 mm 个的元 素是多少?输入格式输入第一行包含一个正整数 nn 。第二行包含一个正整数 mm 。输出格式输出一行包含一个整数, 表示答案。样例输入135copy样例输出3copy样例说明1 到 13 的排序为: 1,10,2,11,3,12,4,13,5,6,7,8,91,10,2,11,3,12,4,13,5,6,7,8,9 。第 5 个数为 3 。评测用例规模与约定对于 30 \%30% 的评测用例, 1 \leq m \leq n \leq 3001≤m≤n≤300 。对于 50 \%50% 的评测用例, 1 \leq m \leq n \leq 10001≤m≤n≤1000 。对于所有评测用例, 1 \leq m \leq n \leq 10^{6}1≤m≤n≤10 6。运行限制最大运行时间:3s最大运行内存: 512M
n = int(input())m = int(input())li = list(range(1,n+1))li.sort(key=lambda x:sum(int(i) for i in str(x)))print(li[m-1])
5.蜂巢 ×
没搞懂这个题目的考察点,模拟?但是实际的模拟又很简单。
6.消除游戏 ×看已交的全过题解
这个还好,几乎一半超时
问题描述
在一个字符串 SS 中, 如果 S_{i}=S_{i-1}S
i
=S
i−1
且 S_{i} \neq S_{i+1}S
i
=S i+1 , 则称 S_{i}S i和 S_{i+1}S i+1为边缘 字符。如果 S_{i} \neq S_{i-1}S i =S i−1
且 S_{i}=S_{i+1}S
i
=S
i+1
, 则 S_{i-1}S
i−1
和 S_{i}S
i
也称为边缘字符。其它的字符 都不是边缘字符。
对于一个给定的串 SS, 一次操作可以一次性删除该串中的所有边缘字符 (操作后可能产生新的边缘字符)。请问经过 2^{64}2 64次操作后, 字符串 SS 变成了怎样的字符串, 如果结果为空则 输出 EMPTY。输入格式输入一行包含一个字符串 SS。输出格式输出一行包含一个字符串表示答案,如果结果为空则输出 EMPTY。样例输入 1eddacopy样例输出 1EMPTYcopy样例输入 2sdfhhhhcvhhxcxnnnnshhcopy样例输出 2scopy评测用例规模与约定对于 25 \%25% 的评测用例, |S| \leq 10^{3}∣S∣≤10 3 , 其中 |S|∣S∣ 表示 SS 的长度;对于 50 \%50% 的评测用例, |S| \leq 10^{4}∣S∣≤10 4 ;对于 75 \%75% 的评测用例, |S| \leq 10^{5}∣S∣≤10 5 ;对于所有评测用例, |S| \leq 10^{6}, S∣S∣≤10 6 ,S 中仅含小写字母。运行限制最大运行时间:5s最大运行内存: 512M
s = input()S = swhile True:b = len(S)vis = [0]*bfor i in range(1,len(S)-1):if(S[i]==S[i+1])and (S[i-1]!=S[i]):vis[i-1]=vis[i]=1if(S[i-1]==S[i])and(S[i]!=S[i+1]):vis[i]=vis[i+1]=1stmp=[]for i in range(len(S)):if vis[i]==0:stmp.append(S[i])if len(stmp)==len(S):print("".join(S))breakif (len(stmp))==0:print("EMPTY")breakS = stmp
7.全排列的价值
发现数据中的巧妙问题描述对于一个排列 A=\left(a_{1}, a_{2}, \cdots, a_{n}\right)A=(a 1 ,a 2 ,⋯,a n ), 定义价值 c_{i}c i为 a_{1}a 1至 a_{i-1}a i−1中小于 a_{i}a i的数 的个数, 即 c_{i}=\mid\left\{a_{j} \mid j<i, a_{j}
n = int(input())s = n*(n-1)/4for i in range(1,n+1):s*= is %=998244353print(int(s))
8.技能提升×
这个有点像那个背包问题,有趣,有意思
是不是动态规划,之后多写几个,有趣
居然是二分,之后再次回顾
9.最长不下降序列×
这个好像是动态规划,值得回顾。
10.最优清零方案
好熟悉,好像cf写过的简单题。