Python代码解蓝桥杯第十三届省赛(C/C++大学B组)赛题

Python代码解蓝桥杯第十三届省赛(C/C++大学B组)赛题。


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……

    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


Python代码解“蓝桥杯第十三届省赛
Python代码解“蓝桥杯第十三届省赛(C/C++大学B组)赛题”
((C/C++大学B组)赛题”)


本笔记正在编辑……
请您期待她长成的样子!

本文质量分:

92
本文地址: https://blog.csdn.net/m0_57158496/article/details/129918628

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆Python代码解“蓝桥杯第十三届省赛(C/C++大学B组)赛题”
    • 1、九进制转十进制
      • 1.0 问题描述
      • 1.1 解题思路
      • 1.2 代码
    • 2、顺子日期
      • 2.0 问题描述
      • 2.1 解题思路
      • 2.2 代码
      • 2.3 代码运行效果截屏图片
    • 3、刷题统计
      • 3.0 问题描述
      • 3.1 解题思路
      • 3.2 代码推敲
      • 3.3 完整代码
    • 4、修剪灌木
      • 4.0 问题描述
      • 4.1 解题思路
      • 4.2 数据构建
      • 4.3 完整代码
      • 4.4 效果截屏图片
    • 5、X 进制减法
      • 5.0 问题描述
      • 5.1 解题思路
      • 5.2 我入了常规进制的“坑”
        • 5.2.1 手动演算
        • 5.2.2 自拟代码演算
        • 5.2.3 Python内置转整函数 int() 演算
      • 5.3 我“醒豁”了
      • 5.4 X进制转十进制的“黄金算法”——万能算法
      • 5.5 求得正解😎
    • 6、统计子矩阵
      • 6.0 问题描述
      • 6.1 解题思路
      • 6.2 解法待贴
    • 7、积木画
      • 7.0 问题描述
      • 7.1 解题思路
      • 7.2 解法待贴
    • 8、扫雷
      • 8.0 问题描述
      • 8.1 解题思路
      • 8.2 解法待贴
    • 9、李白打酒加强版
      • 9.0 问题描述
      • 9.1 解题思路
      • 9.2 解法待贴
    • 10、砍竹子
      • 10.0 问题描述
      • 10.1 解题思路
      • 10.2 解法待贴
    • ◆ 完整源码


◆Python代码解“蓝桥杯第十三届省赛(C/C++大学B组)赛题”


1、九进制转十进制

1.0 问题描述

  九进制正整数 (2022)9 转换成十进制等于多少?(本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。)

  • 运行限制

最大运行时间:1s
最大运行内存: 512M

1.1 解题思路


  其它进制转换十进制,对Python来说,相对方便。Python把除十进制外的进制数,都是用“字符串形式”处理的,其内置int()转换整型函数,可以直接搞定。int()两个形参,前者为字符串形式整数,后者为进制int形式整数,默认10,可以缺省。如:


num = int('2022', 9)
print(num)
  当然,老老实实用“算法”干,也比较不难,按位求得十进制值,累加即解。可以有多种数据结构和代码拼搭可以选择,用什么样子的代码结构,任您喜好。今次我选用“变量累加算法”和int()直接转换。对进制转换想了解更多,可以点击“ 进制转换学习笔记”跳转我的学习笔记博文参阅。

1.2 代码


num0 = '2022' # 九进制整数
#num = list(num0)
#s = [num.pop() for i in num[:]] 
s = [num0[i] for i in range(-1, -(len(num0)+1), -1)]# 反转九进制低位在前,可凭喜好选择list.pop()或者字符串切片。
ans = 0
multiple = 0for i in s:ans += int(i)*(9**multiple)multiple += 1if __name__ == '__main__':print(f"\nI. 九进制转换十进制:\n{'':~^50}\n")input(f"自码程序计算:{num0} -> {ans}\n直接int(num, 9):{num0} -> {int(num0, 9)}\n")

效果截屏
在这里插入图片描述


回页目录

2、顺子日期

2.0 问题描述

  本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
  小明特别喜欢顺子。顺子指的就是连续的三个数字:123 、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。
  例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。
  小明想知道在整个 2022 年份中,一共有多少个顺子日期?

  • 运行限制

最大运行时间:1s
最大运行内存: 512M

2.1 解题思路

  这道题目不难。顺子,即类“自然数”,等差为1的等差数列。要统计的2022年,年份数字与后面的任何月份都成不了顺子,遍历找“顺子”只针对月日四位日期就好。这可以减少遍历字符,稍微加快遍历速度。
  我采用边生成日期边统计“顺子日期”,只遍历全年日期一遍。
  生成日期时,2月照例是要根据闰年与否来定最后一天的;4、6、9、11月,要设定只生成30天的“机关”;余下大月遍历到底for day in range(1, 32)。

2.2 代码

  • 闰年判定

year = 2002
leap_year = ((not year%4 and year%100) or not year%400) # 闰年判定。
  • 顺子日期判定函数

def isstraight(date: str) -> bool:''' 判定顺子日期 '''date2 = list(map(int, date[4:]))tem = 1 # 因是从后一位与前一位数字比较,顺子日期计数器初值置1。for i in range(1, 4):if date2[i] - 1 == date2[i-1]:tem += 1else:tem = 1 # 日期数字不连续,恢复顺子日期计数器初值。if tem >= 3: # 顺子日期数字不小于 3 ,即是顺子日期,不用再作比较判定,返回 True 。return True  return False # 日期数字没有三个顺子日期数字,不是顺子日期,返回 False 。
  • 遍历全年日期

def count() -> int:''' 统计某年的顺子日期 '''count = 0for month in range(1, 13):for day in range(1, 32):if month in (4, 6, 9, 11) and day > 30:break # 小月丢弃生成31日。elif month == 2:if leap_year and day > 29:breakelif not leap_year and day > 28:breakstrdate = f"{year}{month:0>2}{day:0>2}"if isstraight(strdate):count += 1print(strdate, end=', ')return count
  • 调用函数输出结果

if __name__ == '__main__':year = 2022leap_year = ((not year%4 and year%100) or not year%400) # 闰年判定。print(f"\nII. 统计{year}年的顺子日期:\n{'':~^50}\n\n判定顺子日期函数测试:")for demo in (f'{year}1123', f'{year}1112', f'{year}0123'):print(f"“{demo}” is {isstraight(demo)}.")print('\n顺子日期:')print(f"\n{year}年的顺子日期有:{count()}个\n")

2.3 代码运行效果截屏图片

在这里插入图片描述


回页目录

3、刷题统计

3.0 问题描述

  小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在第几天实现做题数大于等于 n 题?

  • 输入格式

输入一行包含三个整数 a、b 和 n。

  • 输出格式

输出一个整数代表天数。

  • 样例

输入
10 20 99

输出
8

  • 评测用例规模与约定

对于 50%的评测用例,1 ≤ a, b, n ≤ 106,对于 100%的评测用例,1 ≤ a, b, n ≤ 1018

  • 运行限制

最大运行时间:1s
最大运行内存: 256M

3.1 解题思路


  本题目,有坑。没有明确一周是以周日还是周一为第一天。

  从示例也看不出来:周一至周五刷题量为每天10,周六周日为每天20:周一始一 10 × 5 + 20 × 2 + 10 = 100,7 + 1 = 8 (天);周日始一 20 + 10 × 5 + 20 + 20 = 110,7 + 1 = 8 (天)。

  我就按国人惯例,以“周一”为一周第一天解析题目。

3.2 代码推敲


week = [a]*5 + [b]*2

根据输入,生成一周每天刷题量数组:
在这里插入图片描述
  对 n 大于一周总刷卡题量,用其取模,直到小于一周刷题问题。

代码可以用减,也可以用整除//:

  • 减 -

sum_week = sum(week)while n > sum_week:n -= sum_weekresult += 7
  • 整除 //
result += 7 * (n // sum_week)n = n % sum_week

用整除 // 更好,不用循环,代码更简洁。


for 循环遍历找寻完成量的不足一周的刷题量用的所用天数,累加到前面累积到的整周天数:

for i in week:if n <= 0:breakn -= iresult += 1

数据输入

while True: # 循环输入,直到正输入。try:a, b, n = map(int, input('\n输入:').strip().split())break # 输入无异常,退出循环。except Exception as error:print(f"\n{error}\n{'输入错误!':~^45}")

效果截屏
在这里插入图片描述

3.3 完整代码


def count_do_exercise(a: int, b: int, n: int) -> int:''' 刷题统计 '''week = [a]*5 + [b]*2#input(week) # 调试用语句。result = 0sum_week = sum(week)'''while n > sum_week:n -= sum_weekresult += 7'''result += 7 * (n // sum_week)n = n % sum_weekfor i in week:if n <= 0:breakn -= iresult += 1return resultif __name__ == '__main__':print(f"\nIII、刷题统计\n{'':~^50}")while True: # 循环输入,直到正输入。try:a, b, n = map(int, input('\n输入:').strip().split())break # 输入无异常,退出循环。except Exception as error:print(f"\n{error}\n{'输入错误!':~^45}")print(f"\n输出:{count_do_exercise(a, b, n)}\n")

效果截屏
在这里插入图片描述


回页目录

4、修剪灌木

4.0 问题描述

  爱丽丝要完成一项修剪灌木的工作。
  有 N 棵灌木整齐的从左到右排成一排,爱丽丝在每天傍晩会修剪一棵灌木,让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木;当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木;直到修剪了最左的灌木后再次调转方向;然后如此循环往复。
  灌木每天从早上到傍晩会长高 1 厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

  • 输入格式

一个正整数 N,含义如题面所述。

  • 输出格式

输出 N 行,每行一个整数,第 i 行表示从左到右第 i 棵树最高能长到多高。

  • 样例

输入
3

输出
4
2
4

  • 评测用例规模与约定

对于 30% 的数据, N≤10,
对于 100% 的数据, 1<N≤10000。

  • 运行限制

最大运行时间:1s
最大运行内存: 512M

4.1 解题思路

  对于任意位置的灌木来说,长的最高的时候,是“修剪后到再次修剪前”,所以用一个数组统计出每棵灌木的最高高度数值就好。
  那,要遍历轮询多少次才可以统计出来呢?直接1000次行不行?当然可以!但应该浪费了资源和时间。我们得找出一个最佳次数。😎
  题目规定从左边第一个位置开始修剪,左→右→左→右→左→……的循环修剪就是符题的“正确”修剪法。据此分析,只需要“左→右→左→右”循环修剪三次就可以保证每棵灌木都至少修剪了两次,换句话说,就可以统计出每棵灌木的最高高度。😜
  所以,本题目的最佳遍历轮询次数为 3 × num

4.2 数据构建


  用可以原址修改的 list 列表类型来存储灌木序列,方便生长和修改后存储其数值。“全局变量”,也用列表存储。


  • 列表存储“全局变量”
trees = [0]*num # 根据输入生成灌木序列数组。max_trees = trees[:] # 最高灌木初值。direction = ['right'] # 修剪方向初值。index = [0] # 当天修剪树木位置初值。

  • 根据输入的 数字 num 构建灌木序列
trees = [0]*num # 根据输入生成灌木序列数组。

  • 最佳遍历轮询总次数

kk = num*3

  • 灌木生长
trees = list(map(lambda x: x+1, trees)) # 灌木生长。

  • 收集灌木最高高度
        if max_trees[index[0]] < trees[index[0]]:max_trees[index[0]] = trees[index[0]]

  • 灌木修剪
trees[index[0]] = 0

  • 每日修剪函数
def everyday_pruning():''' 每日修剪 '''if index[0] == num - 1:direction[0] = 'left'elif index[0] == 0:direction[0] = 'right'if max_trees[index[0]] < trees[index[0]]:max_trees[index[0]] = trees[index[0]]trees[index[0]] = 0if direction[0] == 'right':return [index[0] + 1]elif direction[0] == 'left':return [index[0] - 1]

4.3 完整代码


def pruning_trees() -> int:''' 修剪灌木 '''def everyday_pruning():''' 每日修剪 '''if index[0] == num - 1:direction[0] = 'left'elif index[0] == 0:direction[0] = 'right'if max_trees[index[0]] < trees[index[0]]:max_trees[index[0]] = trees[index[0]]trees[index[0]] = 0if direction[0] == 'right':return [index[0] + 1]elif direction[0] == 'left':return [index[0] - 1]trees = [0]*num # 根据输入生成灌木序列数组。max_trees = trees[:] # 最高灌木初值。direction = ['right'] # 修剪方向初值。index = [0] # 当天修剪树木位置初值。print(f"\n清晨灌木序列 修剪ID 傍晚灌木序列")k = 0kk = num*3while k < kk:trees = list(map(lambda x: x+1, trees)) # 灌木生长。last_trees = treesprint(f"{trees} {index[0]:^4} ", end='')index = everyday_pruning()print(trees)k += 1if k > kk - 1:return [str(i) for i in max_trees]if __name__ == '__main__':print(f"\nIV、修剪灌木\n{'':~^50}")while True:try:num = int(input(f"\n输入:").strip())breakexcept Exception as error:print(f"\n{'输入错误!':^45}\n{'':~^50}\n{error}")print()result = '\n'.join(pruning_trees())print(f"\n\n输出:\n{result}")

4.4 效果截屏图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


回页目录

5、X 进制减法

5.0 问题描述

  进制规定了数字在数位上逢几进一。
  X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 3 2 1 转换为十进制数为 65 。
  现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制, 最低为二进制。请你算出 A−B 的结果最小可能是多少。
  请注意:你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。

  • 输入格式

  第一行一个正整数 N,含义如题面所述。
  第二行一个正整数 Ma​,表示 X 进制数 A 的位数。
  第三行 Ma​ 个用空格分开的整数, 表示 X 进制数 A 按从高位到低位顺序各个数位上的数字在十进制下的表示。
  第四行一个正整数 Mb​, 表示 X 进制数 B 的位数。
  第五行 Mb​ 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各个数位上的数字在十进制下的表示。
  请注意:输入中的所有数字都是十进制的。

  • 输出格式

  输出一行一个整数,表示 X 进制数 A−B 的结果的最小可能值转换为十进制后再模 1000000007 的结果。

  • 样例

输入
11
3
10 4 0
3
1 2 0

输出
94

  • 样例说明

  当进制为:最低位 2 进制,第二数位 5 进制, 第三数位 11 进制时,减法得到的差最小。此时 A 在十进制下是 108,B 在十进制下是 14,差值是 94。

  • 评测用例规模与约定

对于 30% 的数据, N ≤ 10; Ma, Mb ≤ 8;
对于 100% 的数据,2 ≤ N ≤ 1000; 1 ≤ Ma, Mb ≤ 100000; A ≥ B.

  • 运行限制

最大运行时间:1s
最大运行内存:256M

5.1 解题思路


  据题意,要使X进制整数 a - b 的值最小,则被减数 a 要用合适的“进制序列”令其值最小。依“满则向左边高位进 1 ”(进制规定了数字在数位上逢几进一)的进制规则可知,X进制整数 a ,每个数位都处于进位临界值——比进制小 1 ——时,其值最小。因而 a 的“最适”进制序列即为对应数位上的值 + 1 ,b 的进制依 a ( A 和 B 是同一进制规则)按 a 的进制序列求出 a、b 的十进制值,返回差值。


回页目录

5.2 我入了常规进制的“坑”


  常规进制求值(十进制值)算法,从低位到高位,依次求取“数位值×进制^数位索引”,如:
十进制整数:“2 0 5” = 5×10^0 + 0×10^1 + 2×10^2 = 5 + 0 + 200
二进制整数:“1 1 1” = 1×2^0 + 1×2^1 + 1×2^2 = 1 + 2 + 4


  题目中说,“例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 321 转换为十进制数为 65 。”

十进制数位值 3 2 1
X 进制序列 8 10 2
其十进制值 1 + 2×2^1 + 3×10^2 = 1 + 4 + 300

  X进制整数“3 2 1”怎么不是 65 而是 305 ?照此“逻辑”,“10 4 0”、“1 2 0”也得不出 108 和 14 !!


a 十进制数位值 10 4 0
X 进制序列 11 5 2
其十进制值 0 + 4×2^1 + 10×5^2 = 0 + 8 + 250
b 十进制数位值 1 2 0
其十进制值 0 + 2×2^1 + 1×5^2 = 0 + 4 + 25

求X进制整数十进制值的函数(按常规进制——“单纯”,各数位仅有一种进制的整数算法)


def get_value(name: str, x: str, x_n: int, multiples: list) -> int: # 返回十进制整数。''' 求X进制数的十进制值(算法入坑,不对) '''result = 0print(f"\n{name}进制整数:'{x}'\n{'':~^50}\n")    x = list(map(int, x.split())) # 列表解析将字符串数字转换整型。x = [x.pop() for i in x[:]] # 列表解析倒置X进制整数序列。multiples = [1] + [multiples[i-1] for i in range(x_n, 0, -1)] # 切片倒置X进制列表。#input((x, multiples)) # 调试用语句。result = 0 # 结果初值。for index,i in enumerate(zip(x, multiples)):result += i[0]*i[1]**indexprint(f"进制:{i[1] if index else 'None'},倍率:{i[1]**index},数位/值:{index+1}/{i[0]},十进制值:{i[0]*i[1]**index}")print(f"\n{name}进制整数的十进制值是:{result}\n{'':~^50}")    return result

代码运行效果截屏
在这里插入图片描述
在这里插入图片描述


回页目录


  以计算X进制整数“222”,从3进制到11进制的十进制值来进行“算法”验证:

5.2.1 手动演算

十进制数位值 2 2 2
X 进制序列 3 3 3
其十进制值 2×3^0 + 2×3^1 + 2×3^2 = 2 + 6 + 18

X 进制序列 11 11 11
其十进制值 2×11^0 + 2×11^1 + 2×11^2 = 2 + 22 + 242

5.2.2 自拟代码演算

  • 代码演算一 (调用自码X进制求值——十进制——函数 get_value() )

if __name__ == '__main__':x_s = '2 2 2'print(f"\n X 进制整数“{x_s}”,分别是 3~11 进制时的十进制值:\n{'':~^50}\n")for i in range(3, 12):get_value(str(i), x_s, 3, [i]*3)

代码演算截屏
在这里插入图片描述


5.2.3 Python内置转整函数 int() 演算

  • 代码演算二 (Python的字符型数字转整型函数int())
~~~python
/sdcard/qpython $ python
Python 3.11.1 (main, Dec  7 2022, 05:56:18) [Clang 14.0.6 (https://android.googlesource.com/toolchain/llvm-project 4c603efb0 on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> s = '222'
>>> for i in range(3, 12):
...     print(f" {i} 进制整数 '{s}' 的十进制值:{int(s, i)}")
...3 进制整数 '222' 的十进制值:264 进制整数 '222' 的十进制值:425 进制整数 '222' 的十进制值:626 进制整数 '222' 的十进制值:867 进制整数 '222' 的十进制值:1148 进制整数 '222' 的十进制值:1469 进制整数 '222' 的十进制值:18210 进制整数 '222' 的十进制值:22211 进制整数 '222' 的十进制值:266
>>>

  经Python转整函数 int() 验证,“我的算法”对于单一进制的正整数,是完全“正确的”。但这常规进制“算法”,对混合进制数位的X进制整数为什么就无效了呢?🤨



回页目录

5.3 我“醒豁”了

  经过细心观察省度,我“窥得门径”,代码可以正确求取X进制整数的十进制值了——


def get_value(name: str, x: str, x_n: int, multiples: list) -> int: # 返回十进制整数。''' 求X进制数的十进制值(破坑而出还是坑) '''result = 0print(f"\n{name}进制整数:'{x}'\n{'':~^50}")    x = list(map(int, x.split())) # 列表解析将字符串数字转换整型。x = [x.pop() for i in x[:]] # 列表解析倒置X进制整数序列。multiples = [1] + [multiples[i-1] for i in range(x_n, 0, -1)] # 切片倒置X进制列表。result = 0 # 结果初值。for index,i in enumerate(zip(x, multiples)):if index == 0:result += i[0]else:result += i[0]*(i[1]*index)print(f"进制:{i[1] if index else 'None'},倍率:{i[1]*index if index else 1},数位/值:{index+1}/{i[0]},十进制值:{i[0]*index}")print(f"\n{name}进制整数的十进制值是:{result}\n{'':~^50}")    return result

得出了X进制整数解析十进制值的正确结果😁
在这里插入图片描述


  但算法似乎“没有依仗”,我自己都不能自圆其说。🤣
  且这算法仅可解析混合多进制数位的X进制整数,对常规单一进制整数无效。
  但理不清“算法思想”,这醒豁是个伪命题。😂且调用函数处理前面列举的“2 2 2”字符解析分别为3~11进制时,对应的十进制值,是不正确的。

在这里插入图片描述

这“算法”不真!!还待考究。
我这是根本就没有拨开迷雾。🧐🧐


回页目录

5.4 X进制转十进制的“黄金算法”——万能算法


  经过对算法反复推敲,仔细示例验证,终究是得出了适用常规和刁钻的进制组合整数能吃的“黄金万能”算法。😎😎 (欲了解算法解析,请点按蓝色文字跳转翻阅)

转换函数代码


def get_value(name: str, x: str, x_n: int, multiples: list) -> int: # 返回十进制整数。''' 求 X 进制整数的十进制值(“真算法”) '''result = 0print(f"\n {name} 进制整数:'{x}'\n{'':~^50}")    x = list(map(int, x.split())) # 列表解析将字符串数字转换整型。x = [x.pop() for i in x[:]] # 列表解析倒置X进制整数序列。multiples = ['None'] + [multiples[i-1] for i in range(x_n, 0, -1)] # 切片倒置X进制列表,并前补一项 1 。result = 0 # 结果初值。for index,i in enumerate(zip(x, multiples)):if index == 0:result += i[0]multiple = 1else:multiple *= i[1]result += i[0]*multipleprint(f"进制:{i[1] if index else 'None'},倍率:{multiple},数位/值:{index+1}/{i[0]},十进制值:{i[0]*multiple}")print(f"\n{'十进制值:':>18}{result}\n{'':~^50}")    return result

重算前面的例子:
在这里插入图片描述

本题目中的三个X进制整数:“3 2 1”、“10 4 0”、“1 2 0”
在这里插入图片描述

  由截屏图片可鉴,不管是学“常规进制”还是刁钻的 X 进制整数,调用“万能黄金算法”函数,都可以得到正确的十进制值。😎😎
  嚯!!还真没白瞎我对此题目的“日思夜想”😜😜 (欲了解算法详情,请点按蓝色文字跳转翻阅)


回页目录

5.5 求得正解😎


调用函数求解代码


if __name__ == '__main__':print(f"\nV、X 进制减法\n{'':~^50}")s = '''
11
3
10 4 0
3
1 2 0
'''print(f"\n输入:{s}")input_s =[int(i) if i.isdigit() else i for i in s.split('\n')[1:-1]]print(f"\n\n输出:\n{x_subtraction(input_s)}")

运行效果截图(我已打印出运算过程,对算法就不再作讲解)

(欲了解 算法解析,请点按蓝色文字跳转翻阅)

在这里插入图片描述

(欲了解 算法解析,请点按蓝色文字跳转翻阅)

回页目录

6、统计子矩阵

6.0 问题描述

  给定一个 N×M 的矩阵 A , 请你统计有多少个子矩阵(最小 1×1, 最大 N×M )满足子矩阵中所有数的和不超过给定的整数 K 。

  • 输入格式

第一行包含三个整数 N、M 和 K ,之后 N 行每行包含 M 个整数,代表矩阵 A 。

  • 输出格式

一个整数代表答案。

  • 样例

输入
3 4 10
1 2 3 4
5 6 7 8
9 10 11 12

输出
19

  • 样例说明

满足条件的子矩阵一共有 19 ,包含:
大小为 1×1 的有 10 个。
大小为 1×2 的有 3 个。
大小为 1×3 的有 2 个。
大小为 1×4 的有 1 个。
大小为 2×1 的有 3 个。

  • 评测用例规模与约定

对于 30% 的数据,N、M ≤ 20;
对于 70% 的数据, N、M ≤ 100;
对于 100% 的数据,1 ≤ N,M ≤ 500,0 ≤ A ≤ 1000,1 ≤ K ≤ 250000000。

  • 运行限制

最大运行时间:1s
最大运行内存: 256M

6.1 解题思路

  先用二维前缀和存储矩阵信息,再用双指针来寻找正确答案。用i j分别表示一个区域的左右边界,p q来表示上下两个指针,p从上往下寻找q,一直到大小小于等于k,这 时p q这片区域的行数q - p + 1就是子矩阵的个数。

6.2 解法待贴

  



回页目录

7、积木画

7.0 问题描述

  小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型 (大小为 3 个单位面积)。
  同时,小明有一块面积大小为 2×N 的画布, 画布由 2×N 个 1×1 区域构 成。小明需要用以上两种积木将画布拼满, 他想知道总共有多少种不同的方式? 积木可以任意旋转, 且画布的方向固定。
在这里插入图片描述

  • 输入格式

输入一个整数 N,表示画布大小。

  • 输出格式

  输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取模后的值。

  • 样例

输入
3

输出
5

  • 样例说明

五种情况如下图所示,颜色只是为了标识不同的积木:
在这里插入图片描述

  • 评测用例规模与约定

对于所有测试用例,1 ≤ N ≤ 10000000

7.1 解题思路

  dp 题目,一共有三种情况,我们把1设为上层不为空,2 设为下层不为空,3设成全不为空:
  
1:f[i][1],这种情况为 f[i] 的上层不为空,可以通过 f[i - 1] 下层不为空和 f[i - 2] 全不为空得来。
2:f[i][2],这种情况为 f[i] 的下层不为空,可以通过 f[i - 1] 上层不为空和 f[i - 2] 全不为空得来。
3:f[i][3],这种情况为 f[i] 的上下层不为空,可以通过 f[i - 1] 上层不为空和 f[i - 1] 全不为空和 f[i - 1]下层不为空和 f[i - 2] 全不为空得来。
最后输出 f[n] 全不为空就是答案

7.2 解法待贴

  



回页目录

8、扫雷

8.0 问题描述

  小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下,在一个二维平面上放置着 n 个炸雷,第 i 个炸雷 (xi, yi, ri) 表示在坐标(xi​, yi​) 处存在一个 炸雷,它的爆炸范围是以半径为 ri​ 的一个圆。
  为了顺利通过这片土地, 需要玩家进行排雷。玩家可以发射 m 个排雷火箭, 小明已经规划好了每个排雷火箭的发射方向,第 j 个排雷火箭 (xj, yj, rj) 表示这个排雷火箭将会在 (xj​, yj​) 处爆炸, 它的爆炸范围是以半径为 rj​ 的一个圆,在其爆炸范围内的炸雷会被引爆。同时,当炸雷被引爆时,在其爆炸范围内的炸雷也会被引爆。现 在小明想知道他这次共引爆了几颗炸雷?
  你可以把炸雷和排雷火箭都视为平面上的一个点。一个点处可以存在多个 炸雷和排雷火箭。当炸雷位于爆炸范围的边界上时也会被引爆。

  • 输入格式

输入的第一行包含两个整数 n、m,接下来的 n 行,每行三个整数 xi​, yi​,ri​, 表示一个炸雷的信息。再接下来的 m 行,每行三个整数 xj​, yj​, rj​,表示一个排雷火箭的信息。

  • 输出格式

输出一个整数表示答案。

  • 样例

输入
2 1
2 2 4
4 4 2
0 0 5

输出
2

  • 样例说明

  示例图如下,排雷火箭 1 覆盖了炸雷 1,所以炸雷 1 被排除;炸雷 1 又覆盖了炸雷 2,所以炸雷 2 也被排除。

  • 图片描述

  • 评测用例规模与约定

对于 40% 的评测用例: 0 ≤ x,y ≤ 109,0 ≤ n,m ≤ 103,1 ≤ r 6 ≤ 10
对于 100% 的评测用例: 0 ≤ x, y≤ 10,0 ≤n,m≤5×104,1≤r≤10

  • 运行限制

最大运行时间:1s
最大运行内存: 256M

8.1 解题思路

8.2 解法待贴

  



回页目录

9、李白打酒加强版


9.0 问题描述

  话说大诗人李白, 一生好饮。幸好他从不开车。
  一天, 他提着酒显, 从家里出来, 酒显中有酒 2 斗。他 边走边唱:“无事街上走,提显去打酒。 逢店加一倍, 遇花喝一斗。
  这一路上, 他一共遇到店 N 次, 遇到花 M 次。已知最后一次遇到的是花, 他正好把酒喝光了。
  请你计算李白这一路遇到店和花的顺序, 有多少种不同的可能?

注意: 显里没酒 ( 0 斗) 时遇店是合法的, 加倍后还是 没酒; 但是没酒时遇 花是不合法的。


  • 输入格式

第一行包含两个整数 N 和 M。

  • 输出格式

输出一个整数表示答案。由于答案可能很大,输出模 1000000007 的结果。

  • 样例

输入
5 10
1

输出
14
1

  • 样例说明

如果我们用 0 代表遇到花,1 代表遇到店,14 种顺序如下:
010101101000000
010110010010000
011000110010000
100010110010000
011001000110000
100011000110000
100100010110000
010110100000100
011001001000100
100011001000100
100100011000100
011010000010100
100100100010100
101000001010100

  • 评测用例规模与约定

对于 40% 的评测用例: 1≤N,M≤10 。
对于 100%100% 的评测用例: 1≤N,M≤100 。

  • 运行限制

最大运行时间:1s
最大运行内存: 256M

9.1 解题思路

  动态规划,f[i][j][k] 表示在第 i 个位置,遇到第 j 个花,目前还剩 k 斗酒。
当遇到花时:f[i][j][k] =f[i - 1][j - 1][k + 1];
当遇到酒时:f[i][j][k] = (f[i][j][k] + f[i - 1][j][k / 2]) % mod;

  

9.2 解法待贴



回页目录

10、砍竹子


10.0 问题描述

  这天,小明在砍竹子,他面前有 n 棵竹子排成一排,一 开始第 i 棵竹子的 高度为 hi​。
  他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。魔法可以对连续的一段相同高度的竹子使用,假设这一段竹子的高度为 H,那么用一次魔法可以把这一段竹子的高度都变为,其中 ⌊x⌋ 表示对 x 向下取整。小明想 知道他最少使用多少次魔法可让所有的竹子的高度都变为 1 。

  • 输入格式

第一行为一个正整数 nn, 表示竹子的棵数。
第二行共 nn 个空格分开的正整数 hihi​, 表示每棵竹子 的高度。

  • 输出格式

一个整数表示答案。

  • 样例

输入
6
2 1 4 2 6 7
1
2

输出
5
1

  • 样例说明

其中一种方案:
21426214267
→214262→214222→211222→111222→111111
共需要 5 步完成

  • 评测用例规模与约定

对于 20% 的数据, 保证 n≤1000,hi≤106
对于 100% 的数据, 保证 n≤2×105,hi≤1018

10.1 解题思路

  

10.2 解法待贴



回页目录

◆ 完整源码

  (解题源码太长,我会打包上传CSDN“我的资源”解题源码,请点按蓝色文字跳转下载)


十道题的解题源码,我最后会打包上传CSDN“我的资源”。如有需要,可前往我的CSDN主页“我的资源”下载。

回页首

__上一篇:__ str.replace()(129890774)
__下一篇:__ 

我的HOT博:


  本次共计收集 191 篇博文笔记信息,平均阅读量 1518 。已生成 17 篇阅读量大于 3000 的笔记索引链接。数据采集于 2023-04-02 22:09:53 完成,用时 6 分 19.28 秒。


  1. 让QQ群昵称色变的神奇代码
    ( 52167 阅读)
    点赞:22  踩:0  打赏:0  评论:16
    本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。
  2. ChatGPT国内镜像站初体验:聊天、Python代码生成等
    ( 41105 阅读)
    点赞:120  踩:0  打赏:0  评论:73
    本篇博文笔记于 2023-02-14 23:46:33 首发,最晚于 2023-03-22 00:03:44 修改。
  3. pandas 数据类型之 DataFrame
    ( 7550 阅读)
    点赞:6  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。
  4. 罗马数字转换器|罗马数字生成器
    ( 6162 阅读)
    点赞:0  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-01-19 23:26:42 首发,最晚于 2022-01-21 18:37:46 修改。
  5. Python字符串居中显示
    ( 5701 阅读)
    点赞:1  踩:0  打赏:0  评论:1
    本篇博文笔记于 2021-12-26 23:35:29 发布。
  6. 斐波那契数列的递归实现和for实现
    ( 5196 阅读)
    点赞:4  踩:0  打赏:0  评论:8
    本篇博文笔记于 2022-01-06 23:27:40 发布。
  7. 练习:字符串统计(坑:f‘string‘报错)
    ( 4774 阅读)
    点赞:0  踩:0  打赏:0  评论:0
    本篇博文笔记于 2021-12-04 22:54:29 发布。
  8. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    ( 4473 阅读)
    点赞:14  踩:0  打赏:0  评论:0
    本篇博文笔记于 2021-11-30 23:43:17 发布。
  9. 回车符、换行符和回车换行符
    ( 4168 阅读)
    点赞:0  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。
  10. python清屏
    ( 3921 阅读)
    点赞:0  踩:0  打赏:0  评论:0
    本篇博文笔记于 2021-10-14 13:47:21 发布。
  11. 密码强度检测器
    ( 3726 阅读)
    点赞:1  踩:0  打赏:0  评论:0
    本篇博文笔记于 2021-12-06 09:08:25 首发,最晚于 2022-11-27 09:39:39 修改。
  12. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    ( 3687 阅读)
    点赞:0  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-01-20 19:38:12 首发,最晚于 2022-01-21 18:32:02 修改。
  13. 个人信息提取(字符串)
    ( 3584 阅读)
    点赞:1  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。
  14. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
    ( 3432 阅读)
    点赞:1  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-04-26 12:46:25 首发,最晚于 2022-04-27 21:22:07 修改。
  15. 练习:生成100个随机正整数
    ( 3216 阅读)
    点赞:1  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。
  16. 我的 Python.color() (Python 色彩打印控制)
    ( 3120 阅读)
    点赞:2  踩:0  打赏:0  评论:0
    本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。
  17. 练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。
    ( 3021 阅读)
    点赞:3  踩:0  打赏:0  评论:3
    本篇博文笔记于 2022-06-22 19:54:20 首发,最晚于 2022-06-23 22:41:33 修改。

推荐条件 阅读量突破三千
(更多热博,请点击蓝色文字跳转翻阅)

回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


回页首

◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——寒佬(还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是学习的两大利器。

  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛

  • 靠谱程序员的好习惯


CSDN实用技巧博文:

    • 8个好用到爆的Python实用技巧
    • python忽略警告
    • Python代码编写规范
    • Python的docstring规范(说明文档的规范写法)

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20946.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    GDOUCTF2023 WriteUP by 肥猪拱菜队

    前言 本篇WriteUP为B0、ccc、Boogipop、树木共同编写&#xff0c;感谢三位师傅带我打比赛拿了个第五Orz Misc 签到 关注微信公众号发送指令得到flag Matryoshka 解压附件得到一个zip和一个txt&#xff0c;看看txt的内容 不难发现&#xff0c;是将数字和一些运算符号给用英…

    chatGPT教你学sql的事务

    事务的隔离级别 事务的隔离级别是指多个并发事务之间相互隔离的程度&#xff0c;主要是为了解决并发事务带来的一致性问题&#xff0c;它的主要作用是控制数据库中事务的可见性和可重复读。 在 SQL 标准中&#xff0c;定义了四种事务隔离级别&#xff0c;分别为&#xff1a; …

    最全的AI插件Astute Graphics 2020全系列

    Astute Graphics 2020全系列AI插件 Mac版包含了Astute Graphics出品的全部AI插件&#xff0c;包含18个常用辅助功能&#xff0c;可以帮助用户提高平面和矢量设计的效率&#xff0c;不断提高你的设计工作流程。让图像处理工作更快速高效。完美兼容Adobe Illustrator2018- -2020&…

    精选AI工具合集,效率神器!不止ChatGPT

    2023绝对称得上是脑洞大开的一年&#xff01;人工智能的风口由OpenAI旗下的ChatGPT率先引爆&#xff0c;从前认为不会被AI取代的知识型工作&#xff0c;它也足以胜任。AI不会取代你自己&#xff0c;但用好AI你将会淘汰大部分人。下面给大家整理5个实用的AI合集工具供参考。 全…

    多地重大项目密集开工 建筑行业人才暴涨

    7月31日&#xff0c;武汉举行了第三季度重大项目集中开工活动&#xff0c;本次集中开工的亿元以上重大项目共161个&#xff0c;总投资达2158亿元。同日&#xff0c;安徽举行2021年第七批重大项目集中开工动员会&#xff0c;共有227个重大项目集中开工&#xff0c;总投资1064亿元…

    【产业互联网周报】全国超30城市正建或筹建智算中心;比尔•盖茨:不太看好Web3和元宇宙;...

    关注ITValue&#xff0c;看企业级最新鲜、最价值报道&#xff01; &#xff08;1月9日-15日&#xff09;最近一周&#xff0c;加拿大宣布启动国家量子战略&#xff1b;微软收购可组合式基础设施供应商Fungible&#xff1b;阿里云海外增设产品、生态等四大国际能力中心&#xff…

    隐私计算头条周刊(2.6-2.12)

    开放隐私计算 收录于合集 #企业动态42个#周刊合辑43个#政策聚焦36个#隐私计算43个#隐私计算技术36个 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技…

    2022年中国广义数据智能市场规模为442亿元

    数据智能是当前市场上的热点应用。但业界对于数据智能的发展状况&#xff0c;缺乏深入探讨与研究。为了系统梳理中国数据智能行业市场全景&#xff0c;厘清行业发展脉络&#xff0c;为从业者提供有价值的借鉴&#xff0c;海比研究院联合中国软件网、中国软件行业协会应用软件产…

    招标 | 近期隐私计算项目招标中标33(中国邮储银行、中国移动、南湖实验室等)

    开放隐私计算 1 招标 1、 基于隐私计算的智能化数据开发与运营平台&#xff08;天机平台&#xff09;项目 项目名称&#xff1a;基于隐私计算的智能化数据开发与运营平台&#xff08;天机平台&#xff09;项目 公告日期&#xff1a;2023-03-23 采购单位&#xff1a;上海数据集…

    thinkphp6 + phpexcel 导入导出数据,设置特殊表格

    第一步&#xff1a;安装excel&#xff0c;使用composer安装&#xff0c;我的是在window下&#xff0c;直接cmd切换到项目下面&#xff0c;输入 composer require phpoffice/phpexcel&#xff0c;然后就等待安装完成。如下图&#xff1a; 第二步&#xff1a;引入相关类 <?…

    雅思口语考试的口音问题怎么解决?

    很多学生都担心自己的口音不标准&#xff0c;也许在考试中难拿高分。确实口音不标准对于学生的雅思口语会有影响&#xff0c;那么就来看看雅思考试口音问题怎么解决吧。 一、雅思口语考试口音问题 1、分清楚元音和辅音中的易混音 听力中大家一定遇到过这样的情况&#xff0c;…

    剑桥口语 — 48 个音标标准口型与细节发音

    文章目录 一、不同的音标介绍二、DJ 音标三、常识&#xff08;一&#xff09;空腔器官&#xff08;二&#xff09;元音&#xff08;三&#xff09;元音舌位图 四、参考视频与教材四、元音&#xff08;1&#xff09;前元音&#xff1a;[i:] [ɪ] [e] [][i:][ɪ][e][] &#xff0…

    怎么按面积比例创建缓冲多边形——看一下ChatGPT怎么回答

    学习更多Python & GIS的相关知识&#xff0c;请移步公众号GeodataAnalysis。 之前写论文的时候看到过一个计算城市边界的方法&#xff0c;其大致流程是这样的&#xff0c;先是识别建成区单元&#xff1b;然后去除农村建成区单元&#xff1b;之后为每个单元创建缓冲区&…

    Nature:为什么人工智能需要理解因果?

    转自&#xff1a;集智俱乐部 作者&#xff1a;Neil Savage 导语&#xff1a;为什么药物只对某些人有效&#xff0c;而对另一些人无效&#xff1f;为什么 ChatGPT 会产生违背常识的答案&#xff1f;机器学习的发展似乎遇到了障碍&#xff0c;其中症结或许在于“相关性不等于因果…

    2023数据技术嘉年华(福利来了)

    2023的数据技术嘉年华即将如约而至&#xff0c;可能有朋友知道&#xff0c;这次的DTC&#xff0c;其实是去年12月的延期&#xff0c;只能赞叹大佬们对当时和未来形势的判断如此精妙。无论如何&#xff0c;作为一次技术人员的集会&#xff0c;能面对面交流&#xff0c;都是一次难…

    轻量版ChatGPT训练方法开源!仅用3天围绕LLaMA打造,号称训练速度比OpenAI快15倍...

    萧箫 发自 凹非寺量子位 | 公众号 QbitAI 基于Meta模型打造的轻量版ChatGPT&#xff0c;这就来啦&#xff1f; Meta宣布推出LLaMA才三天&#xff0c;业界就出现了把它打造成ChatGPT的开源训练方法&#xff0c;号称比ChatGPT训练速度最高快15倍。 LLaMA是Meta推出的超快超小型GP…

    为什么 APISIX Ingress 是比 Traefik 更好的选择?

    ❝ 作者&#xff1a;张晋涛&#xff0c;API7.ai 云原生专家&#xff0c;Apache APISIX Committer、Kubernetes Ingress Nginx Reviewer Apache APISIX Ingress Apache APISIX Ingress[1] 是一个使用 Apache APISIX 作为数据面的 Kubernetes Ingress controller 实现。 目前&…

    ChatOps的利器:Hubot

    引言 近几年&#xff0c;DevOps 在各个企业用的风生水起&#xff0c;也衍生出了很多的其他的实践和理念&#xff0c;比如AIOps&#xff0c;DevSecOps&#xff0c; TestOps&#xff0c; BizOps 当然还有本文的主角 ChatOps大哥了。 说起ChatOps&#xff0c; 顾名思义就是通过聊…

    大模型开发(五):实现Jupyter本地调用OpenAI API

    全文共3000余字&#xff0c;预计阅读时间约15分钟 | 满满干货&#xff0c;建议收藏&#xff01; 大模型开发(五)&#xff1a;实现Jupyter本地调用OpenAI API OpenAI作为本轮大语言模型技术进步的先驱&#xff0c;其系列大型模型在效果上一直保持着领先。其推出的各类模型如文本…

    [考研数据结构]第2章之顺序表的基本知识与操作

    前言 从本篇文章开始&#xff0c;正式开启考研专业课之一的数据结构的复习之旅&#xff0c;数学与专业课并驾齐驱&#xff0c;早开始&#xff0c;后期才能游刃有余。另外博客重点分享数据结构需要动手实践的代码部分&#xff0c;对于概念的解释将被一笔带过或者忽略&#xff0c…