蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解

【蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解】上次蓝桥杯省一国三二轮游,这次嘛,不光心心念念的北京也没了,而且这届体验明显没有上届好。。
刚考完试,来发一下自己的代码和解法,B、D、I是完全不会,H题不确定。
只能说。。。这届蓝桥杯好无语
我线上考的,我**打开个文件夹解压缩试题都算我两次 ”跳出当前界面“,
腾讯会议里“老师,我跳出次数太多被黄牌警告了”的声音此起彼伏
嗨!您猜怎么着!
老师说,黄牌都不用管,咱不看拉!
什么东西!(小声)(唯唯诺诺)
蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#403 #第一道题,找规律即可 #无论如何,要先切四刀,把纸上下左右切下来 #然后,切成若干个小条,每个小条若干刀 #比如 2 * 3 #就是 4 + (2-1) * (3-1) = 4 + 2 = 6 #就是,先切成22个小条,每个小条19刀,上下左右先切四刀 #所以答案是4 + (21) * (20)

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#不会 #我完全没有尝试的欲望和冲动

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#这道题和最后一道题会用到 #水题,不说了 #去重思路就是字典 def num_y(n): i = 2 dic = {} while i <= n: if n % i == 0: if i in dic: dic[i] += 1 else: dic[i] = 1 n /= i i = 1 i += 1 return dic n = int(input()) print(len(num_y(n))

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#一共就三种,4,6,8 #就三个块 #但是!我不会!

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#2^64。。。 #10^6。。。。 #这基本就是跑死,跑到最后的意思 #用不着考虑2^64次操作啥的 #那就写个函数,先标记,然后再来个循环更改 #因为,对于abbccd #如果直接操作,那就没了 #如果从前到后,那就是cd s = input() def dofun(s): flag = False ls = [False] * len(s) for i in range(len(s) - 2): if (s[i] == s[i+1] and s[i+1] != s[i+2]): ls[i+1] = True ls[i+2] = True flag = True if(s[i] != s[i+1] and s[i+1] == s[i+2]): ls[i] = True ls[i+1] = True flag = True if s == "": print("EMPTY") return if(not flag): print(s) return next_s = "" for i in range(len(s)): if not ls[i]: next_s += s[i] dofun(next_s)dofun(s)

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#给定一个数组 A 和一些查询 Li, Ri,求数组中第 Li 至第 Ri 个元素之和。 #小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查 #询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可 #以增加多少? #这个问题蛮简单的,两次排序。 #首先,排序查询次数 #然后排序数组 #相乘就是更改后的答案,减去之前的就行""" 5 1 2 3 4 5 2 1 3 2 5 """ n = int(input()) ls = list(map(int,input().split())) sea_m = int(input()) sea_ls = [0] * len(ls) ori_ans = 0 for i in range(sea_m): op,cl = map(int,input().split()) for j in range(op-1,cl): ori_ans += ls[j] sea_ls[j] += 1 #拿到了数组,保存了查询次数。 #对查询次数进行排序,对原数组进行排序 #然后根据查询次数相乘 ls.sort() sea_ls.sort() ans = 0 for i in range(len(ls)): ans += ls[i] * sea_ls[i] print(ans - ori_ans)

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#反正就是,找个规律嘛 #(1,2,3):0+1 +2=3 #(1,3,2):0+1+1=2 #(2,1,3) :0+0+2=2 #(2,3,1):0+1+0=1 #(3,1,2):0+0+1=1 #(3,2,1):0+0+0=0 #可以看到,(1,2,3)的价值和(3,2,1)是互补的,他们的合等于最大排列的数值。 #所以,公式就简单了起来:全排列数目*最大排列数值 def velue(ls): ans = 0 for i in range(len(ls)): for j in range(i): if ls[i] > ls[j]: ans += 1 return ansdef get_value(n): ls = [] ans = 1 for i in range(1,n+1): ans *= i ans %= 998244353 ls.append(i) return (int(ans/2 * (n-1) * (n) /2)) % 998244353biao = [1,9,72,600,5400,52920,564480,6531840,8164800]#我是先用iterstools打表才找到的规律。。。n = int(input()) print(get_value(n))

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#这道题我想的好麻烦,也不一定对。 #我设置了三个数组,dp,dp_ans,dp_finl #dp就是正常的子序列长度 #dp_ans是”接上“之后新增的长度 #dp_finl是用于比较的答案长度 def max_up_list(ls): global limit #如果我俩之间的距离小于等于给的数 #我俩就可以接上,不光接上,还可以加上中间的值 #K = 1 #0 1 2 3 4 5#1 4 2 6 8 5 #1 2 2 3 4 3 #1 2 2 4 4 3 #0 0 0 1 0 0 #后面的数组也可以加我 #也就是说,后面的数组加的是我和我的新增量 #那么,dp_ans存储新增量 #使用maxn_finl存储最大新增量 #整条序列中,最终答案为:max(进行操作的新增量)+dp[i] dp = [1] * len(ls) dp_ans = [0] * len(ls) dp_fina = [0] * len(ls) for i in range(len(ls)):maxn = 0 maxn_ans = 0 maxn_finl = 0#for j in range(i): if ls[i] >= ls[j] and dp[j] > maxn:#dp数组更新 maxn= dp[j]if ls[i-1] < ls[j] and ls[i] > ls[j] and i - j - 1 <= limit and dp[j] + i - j - 1 > maxn_ans:#当次操作的dp数组更新 print(i,j) maxn_ans = dp[j] + i - j#本来是i-j-1,但是自己也是个长度。maxn_finl = max(maxn_finl, dp_ans[j])#更新标志物 dp[i] += maxn if maxn_ans - maxn > 0: dp_ans[i] += (maxn_ans - dp[i]) dp_fina[i] += (maxn_finl + dp[i] + dp_ans[i]) return max(dp_fina)length,limit = map(int,input().split()) ls = list(map(int,input().split())) print(max_up_list(ls))

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

不会

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

蓝桥杯Python专项|第十三届蓝桥杯大赛软件组省赛Python大学A组不完全题解
文章图片

#能表示成那个形式,就两个条件 #1,质因数小于等于两个 #2,非1质因数的幂大于等于二 #直接用第一道大题的函数 def num_y(n): i = 2 dic = {} while i <= n: if n % i == 0: if i in dic: dic[i] += 1 else: dic[i] = 1 n /= i i = 1 i += 1 return dicn = int(input()) for i in range(n): tmp = int(input()) tmp_d = num_y(tmp) flag = True if len(tmp_d) > 2: flag = False else: for j in tmp_d: if tmp_d[j] < 2: flag = False if flag: print("yes") else: print("no")

    推荐阅读