| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 蓝桥杯第十三届国赛PythonB组题解 -> 正文阅读 |
|
[数据结构与算法]蓝桥杯第十三届国赛PythonB组题解 |
蓝桥杯第十三届国赛PythonB组题解【写在前边】 这次的题还是比较难的,只做出来7道,交上去6道,还有一半是暴力做的😂。只求国三了😭 开局两道填空题用了快两个小时,直接搞崩了心态。。淦! 本题解仅代表个人观点及思路,不代表标准答案。欢迎各位巨佬指导交流😊。 所有代码均存放于仓库: Github:https://github.com/AYO-YO/Algorithm/tree/蓝桥杯_国赛 Gitee: https://gitee.com/ayo_yo/Algorithm/tree/蓝桥杯_国赛 试题A:斐波那契与7(5分)【问题描述】 【答案提交】 【思路分析】 这道题又是一个超大数,斐波那契本来就是指数级增长,直接爆肯定是不行的。
【参考答案】
【完整代码】 A.py (Gitee.com)?A.py (github.com) 试题B: 小蓝做实验(5分)【问题描述】 【答案提交】 【思路分析】 这个题有200w个数,直接暴力找肯定不行。我一开始走了弯路子,多线程,素数判断优化都用上了。最后才发现我想多了,比赛结束前1分钟才把数爆出来,也没时间写针对大数的素性测试了。。思路如下:
【完整代码】 比赛过程中的代码是分步骤的,一步步写,然后得到结果后再计算下一步,这个代码是优化过的完整版代码,直接运行就能得到最终结果。 B.py (Gitee.com)?B.py (github.com) 试题C:取模(10分,10s,512MB)【问题描述】 给定 n , m n, m n,m,问是否存在两个不同的数 x , y x, y x,y使得 1 ≤ x < y ≤ m 1 ≤ x < y ≤ m 1≤x<y≤m且 n n nmod x x x= n n nmod y y y。 【输入格式】 输入包含多组独立的询问。 第一行包含一个整数 T 表示询问的组数。 接下来 T T T行每行包含两个整数 n , m n, m n,m,用一个空格分隔,表示一组询问。 【输出格式】 输出
T
T
T行,每行依次对应一组询问的结果。如果存在,输出单词 【样例输入】
【样例输出】
【评测用例规模与约定】 对于 20 % 20\% 20%的评测用例, T ≤ 100 , n , m ≤ 1000 T ≤ 100 ,n, m ≤ 1000 T≤100,n,m≤1000; 对于 50 % 50\% 50%的评测用例, T ≤ 10000 , n , m ≤ 1 0 5 T ≤ 10000 ,n, m ≤ 10^5 T≤10000,n,m≤105; 对于所有评测用例, 1 ≤ T ≤ 1 0 5 , 1 ≤ n ≤ 1 0 9 , 2 ≤ m ≤ 1 0 9 1 ≤ T ≤ 10^5 ,1 ≤ n ≤ 10^9 ,2 ≤ m ≤ 10^9 1≤T≤105,1≤n≤109,2≤m≤109。 【思路分析】 没啥巧妙的解法,直接暴力做,通关估计够呛。 【参考代码】 C.py (Gitee.com)?C.py (github.com) 试题D:内存空间(10分,10s,512MB)【问题描述】 小蓝最近总喜欢计算自己的代码中定义的变量占用了多少内存空间。为了简化问题,变量的类型只有以下三种:
定义变量的语句只有两种形式,第一种形式为:
定义了若干个 type 类型变量 var1、var2、…,并且用 value1、value2…初始化,多个变量之间用 第二种形式为:
定义了若干 type 类型的一维数组变量 arr1、arr2…,且数组的大小为 size1、size2…,多个变量之间用 已知小蓝有 T 条定义变量的语句,请你帮他统计下一共占用了多少内存空间。结果的表示方式为:a 【输入格式】 输入的第一行包含一个整数 T T T,表示有 T T T句变量定义的语句。接下来 T T T行,每行包含一句变量定义语句。 【输出格式】 输出一行包含一个字符串,表示所有语句所占用空间的总大小。 【样例输入 1】
【样例输出 1】
【样例输入 2】
【样例输出 2】
【样例说明】 样例 1,占用的空间为
131072
×
8
=
1048576
B
131072 × 8 = 1048576 B
131072×8=1048576B,换算过后正好是 样例 2,占用的空间为
4
×
2
+
8
×
2
+
10
+
8
×
100000
×
2
B
4 × 2 + 8 × 2 + 10 + 8 × 100000 × 2 B
4×2+8×2+10+8×100000×2B,换算后是 【评测用例规模与约定】 对于所有评测用例,
1
≤
T
≤
10
1 ≤ T ≤ 10
1≤T≤10,每条变量定义语句的长度不会超过
1000
1000
1000。所有的变量名称长度不会超过
10
10
10,且都由小写字母和数字组成。对于整型变量,初始化的值均是在其表示范围内的十进制整数,初始化的值不会是变量。对于 【思路分析】 这个题乍一看还挺唬人的,占了足足3页,因为我前两道填空题占用了非常多的时间,已经开始慌了,到这题时一看题,心想凉了,这才第二道编程题就这么难了吗😂但仔细读了一下题目,发现并不难,跟着题目做就行,得益于Python操作字符串非常方便,所以能给这道题省下不少功夫。 思路如下:
【参考代码】 D.py (Gitee.com)?D.py (github.com) 试题E:近似GCD(15分,10s,512MB)【问题描述】 小蓝有一个长度为
n
n
n的数组$A = (a_1, a_2, · · · , a_n) 具体的,判断 g 是否为一个子数组的近似 GCD 如下:
小蓝想知道,数组 A 有多少个长度大于等于 2 的子数组满足近似 GCD 的值为 g。 【输入格式】 输入的第一行包含两个整数 n, g,用一个空格分隔,分别表示数组 A 的长度和 g 的值。 第二行包含 n 个整数 a 1 , a 2 , ? ? ? , a n a_1, a_2, · · · , a_n a1?,a2?,???,an?,相邻两个整数之间用一个空格分隔。 【输出格式】 输出一行包含一个整数表示数组 A 有多少个长度大于等于 2 的子数组的近似 GCD 的值为 g 。 【样例输入】
【样例输出】
【样例说明】 满足条件的子数组有 5 个: [ 1 , 3 ] [1, 3] [1,3]:将 1 修改为 3 后,这个子数组的最大公约数为 3 ,满足条件。 [ 1 , 3 , 6 ] [1, 3, 6] [1,3,6]:将 1 修改为 3 后,这个子数组的最大公约数为 3 ,满足条件。 [ 3 , 6 ] [3, 6] [3,6]:这个子数组的最大公约数就是 3 ,满足条件。 [ 3 , 6 , 4 ] [3, 6, 4] [3,6,4]:将 4 修改为 3 后,这个子数组的最大公约数为 3 ,满足条件。 [ 6 , 4 ] [6, 4] [6,4]:将 4 修改为 3 后,这个子数组的最大公约数为 3,满足条件。 【评测用例规模与约定】 对于 20 % 20\% 20%的评测用例, 2 ≤ n ≤ 1 0 2 2 ≤ n ≤ 10^2 2≤n≤102; 对于 40 % 40\% 40%的评测用例, 2 ≤ n ≤ 1 0 3 2 ≤ n ≤ 10^3 2≤n≤103; 对于所有评测用例, 2 ≤ n ≤ 1 0 5 , 1 ≤ g , a i ≤ 1 0 9 2 ≤ n ≤ 10^5 ,1 ≤ g, a_i ≤ 10^9 2≤n≤105,1≤g,ai?≤109。 【思路分析】 这道题虽然说是gcd,但和gcd其实没有什么关系。。。 主要是划分子数组,如果子数组中只有至多 1 个数不是 g 的因子。那么这个子数组就是满足条件的,因为可以任意修改,无需关注修改为什么值。 【参考代码】 E.py (Gitee.com)?E.py (github.com) 试题I:owo(25分,10s,512MB)【问题描述】 小蓝很喜欢 owo ,他现在有一些字符串,他想将这些字符串拼接起来,使得最终得到的字符串中出现尽可能多的 owo 。 在计算数量时,允许字符重叠,即 owowo 计算为 2 个,owowowo 计算为3 个。 请算出最优情况下得到的字符串中有多少个 owo。 【输入格式】 输入的第一行包含一个整数 n ,表示小蓝拥有的字符串的数量。接下来 n 行,每行包含一个由小写英文字母组成的字符串 si 。 【输出格式】 输出 n 行,每行包含一个整数,表示前 i 个字符串在最优拼接方案中可以得到的 owo 的数量。 【样例输入】
【样例输出】
【评测用例规模与约定】 对于 10 % 10\% 10%的评测用例, n ≤ 10 n ≤ 10 n≤10; 对于 40 % 40\% 40%的评测用例, n ≤ 300 n ≤ 300 n≤300; 对于 60 % 60\% 60%的评测用例, n ≤ 5000 n ≤ 5000 n≤5000; 对于所有评测用例, 1 ≤ n ≤ 1 0 6 , 1 ≤ ∣ s i ∣ , ∣ s i ∣ ≤ 1 0 6 1 ≤ n ≤ 10^6 ,1 ≤ |s_i| , |s_i| ≤ 10^6 1≤n≤106,1≤∣si?∣,∣si?∣≤106,其中 ∣ s i ∣ |s_i| ∣si?∣表示字符串 s i s_i si?的长度。 【思路分析】 这个题虽然是25分的题,但用Python来做,不算难,,盲猜应该用动规,但时间不多了,来不及细推,我选择的是直接暴力做。暴力全排列,时间复杂度极其之高。虽然题目给了10s,,但估计还是过不去。
【完整代码】 I.py (Gitee.com)?I.py (github.com) 试题J:替换字符(25分,10s,512MB)【问题描述】 给定一个仅含小写英文字母的字符串 s,每次操作选择一个区间 [ l i , r i ] [l_i, r_i] [li?,ri?]将 s的该区间中的所有字母 x i x_i xi?全部替换成字母 y i y_i yi?,问所有操作做完后,得到的字符串是什么。 【输入格式】 输入的第一行包含一个字符串 s 。第二行包含一个整数 m 。 接下来 m 行,每行包含 4 个参数 l i , r i , x i , y i l_i, r_i, x_i, y_i li?,ri?,xi?,yi?,相邻两个参数之间用一个空格分隔,其中 l i , r i l_i, r_i li?,ri?为整数, x i , y i x_i, y_i xi?,yi?为小写字母。 【输出格式】 输出一行包含一个字符串表示答案。 【样例输入】
【样例输出】
【评测用例规模与约定】 对于 40 % 40\% 40%的评测用例, ∣ s ∣ , m ≤ 5000 |s|, m ≤ 5000 ∣s∣,m≤5000; 对于所有评测用例, 1 ≤ ∣ s ∣ , m ≤ 1 0 5 , 1 ≤ l i ≤ r i ≤ ∣ s ∣ , x i =? y i 1 ≤ |s|, m ≤ 10^5 ,1 ≤ l_i ≤ r_i ≤ |s| ,x_i \not= y_i 1≤∣s∣,m≤105,1≤li?≤ri?≤∣s∣,xi??=yi?,其中 |s| 表示字符串 s 的长度。 【思路分析】 这个题甚至比之前的更简单,觉得需要优化吧,一看时间给了10s😂。直接跟着题目淦就行了。 【完整代码】 J.py (Gitee.com)?J.py (github.com) ———分割线———做出来的到这儿就结束了,剩下的三道题没做出来,恳请赐教哇。 试题F:交通信号(15分,10s,512MB)【问题描述】 请问从结点 s 到结点 t 所需的最短时间是多少,如果 s 无法到达 t 则输出?1。 【输入格式】 输入的第一行包含四个整数
n
,
m
,
s
,
t
n, m, s, t
n,m,s,t,相邻两个整数之间用一个空格分隔。接下来 m 行,每行包含五个整数
u
i
,
v
i
,
g
i
,
r
i
,
d
i
u_i, v_i, g_i, r_i, d_i
ui?,vi?,gi?,ri?,di? 【输出格式】 输出一行包含一个整数表示从结点 s 到达 t 所需的最短时间。 【样例输入】
【样例输出】
【评测用例规模与约定】 对于 40% 的评测用例, n ≤ 500 , 1 ≤ g i , r i , d i ≤ 100 n ≤ 500 ,1 ≤ g_i, r_i, d_i ≤ 100 n≤500,1≤gi?,ri?,di?≤100; 对于 70% 的评测用例, n ≤ 5000 n ≤ 5000 n≤5000; 对于所有评测用例, 1 ≤ n ≤ 100000 , 1 ≤ m ≤ 200000 , 1 ≤ s , t ≤ n , 1 ≤ u i , v i ≤ n , 1 ≤ g i , r i , d i ≤ 1 0 9 1 ≤ n ≤ 100000 ,1 ≤ m ≤ 200000 ,1 ≤ s, t ≤ n ,1 ≤ u_i, v_i ≤ n ,1 ≤ g_i, r_i, d_i ≤ 10^9 1≤n≤100000,1≤m≤200000,1≤s,t≤n,1≤ui?,vi?≤n,1≤gi?,ri?,di?≤109。 【思路分析】 emmm😶,这个题说实话,题都有点没读明白。。 试题G:点亮(20分,10s,512MB)【问题描述】 小蓝最近迷上了一款名为《点亮》的谜题游戏,游戏在一个 n × n 例如,有一个黑色格子处数字为 4,这表示它周围必须有 4 个灯泡,需要在他的上、下、左、右处分别放置一个灯泡;如果一个黑色格子处数字为 2,它的上下左右相邻格子只有 3 题目保证给出的数据是合法的,黑色格子周围一定有位置可以放下对应数量的灯泡。且保证所有谜题的解都是唯一的。 现在,给出一个初始的棋盘局面,请在上面放置好灯泡,使得整个棋盘上的白色格子被点亮。 【输入格式】 输入的第一行包含一个整数 n,表示棋盘的大小。 接下来 n 行,每行包含 n 个字符,表示给定的棋盘。字符 . 表示对应的格子为白色,数字字符 0、1、2、3、4 表示一个有数字标识的黑色格子,大写字母 X 表示没有数字标识的黑色格子。 【输出格式】 输出 n 行,每行包含 n 个字符,表示答案。大写字母 O 表示对应的格子包含灯泡,其它字符的意义与输入相同。 【样例输入】
【样例输出】
【样例说明】 答案对应的棋盘布局如下图所示: 【评测用例规模与约定】 对于所有评测用例, 2 ≤ n ≤ 5 2 \le n \le 5 2≤n≤5,且棋盘上至少有 15 15% 15的格子是黑色格子。 【思路分析】 深搜?动规??不会,,要不是时间太紧,差点写爆破😂 试题H:打折(20分,15s,512MB)【问题描述】 小蓝打算采购 n 种物品,每种物品各需要 1 个。 小蓝所住的位置附近一共有 m 个店铺,每个店铺都出售着各种各样的物品。 第 i 家店铺会在第 s i s_i si?天至第 t i t_i ti?天打折,折扣率为 p i p_i pi?,对于原件为 b 的物品,折后价格为 ? b ? p j 100 ? \lfloor \frac{b·p_j}{100} \rfloor ?100b?pj???。其它时间需按原价购买。 小蓝很忙,他只能选择一天的时间去采购这些物品。请问,他最少需要花多少钱才能买到需要的所有物品。 题目保证小蓝一定能买到需要的所有物品。 【输入格式】 输入的第一行包含两个整数 n, m,用一个空格分隔,分别表示物品的个数和店铺的个数。 接下来依次包含每个店铺的描述。每个店铺由若干行组成,其中第一行包含四个整数
s
i
,
t
i
,
p
i
,
c
i
s_i, t_i, p_i, c_i
si?,ti?,pi?,ci?,相邻两个整数之间用一个空格分隔,分别表示商店优惠的起始和结束时间、折扣率以及商店内的商品总数。之后接
c
i
c_i
ci? 【输出格式】 输出一行包含一个整数表示小蓝需要花费的最少的钱数。 【样例输入】
【样例输出】
【评测用例规模与约定】 对于 40% 的评测用例, n , m ≤ 500 , s i ≤ t i ≤ 100 , c i ≤ 2000 n, m ≤ 500 ,s_i ≤ t_i ≤ 100 , c_i ≤ 2000 n,m≤500,si?≤ti?≤100,ci?≤2000; 对于 70% 的评测用例, n , m ≤ 5000 , c i ≤ 20000 n, m ≤ 5000 , c_i ≤ 20000 n,m≤5000,ci?≤20000; 对于所有评测用例, 1 ≤ n , m ≤ 100000 , 1 ≤ c i ≤ n , c i ≤ 400000 , 1 ≤ s i ≤ t i ≤ 1 0 9 , 1 < p i < 100 , 1 ≤ a j ≤ n , 1 ≤ b j ≤ 1 0 9 1 ≤ n, m ≤ 100000 ,1 ≤ ci ≤ n , ci ≤ 400000 ,1 ≤ s_i ≤ t_i ≤ 10^9 ,1 < p_i < 100 ,1 ≤ a_j ≤ n ,1 ≤ b_j ≤ 10^9 1≤n,m≤100000,1≤ci≤n,ci≤400000,1≤si?≤ti?≤109,1<pi?<100,1≤aj?≤n,1≤bj?≤109。 【思路分析】 又是一道看题目都费劲的题,,不过盲猜应该类似于背包问题。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:01:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |