蓝桥杯A组——Python(10.10)Day12

蓝桥杯A组——Python(10.10)Day12

今天一天课和辩论搞到太晚

W3T7-翻转:

   小蓝用黑白棋的n个棋子排成了一行,他在脑海里想象出了一个长度为 n的01串T,他发现如果把黑棋当做1,白棋当做0,这一行棋子也是一个长度为n的01串S。
   小蓝决定,如果在S中发现一个棋子和它两边的棋子都不一样,就可以将其翻转变成另一个颜色。
   也就是说,如果S中存在子串 101或者010,就可以选择将其分别变为111和000,这样的操作可以无限重复。
   小蓝想知道最少翻转多少次可以把S变成和T一模一样
   【输入格式】
输入包含多组数据
输入的第一行包含一个正整数 D表示数据组数
后面2D行每行包含一个01串,每两行为一组数据,第 2i-1行为第i组数据的Ti,第2i行为第i组数据的Si,Si和Ti度均为n。

  • 我们可以发现其不会对其他位置有影响,不会发生连锁反应,
  • 也就是在比对Si和Ti时,若Si!=Ti则判断Si是否符合翻转的条件,如果不符合翻转的条件则S不能变成T。
  • 简单题+1
print('【输入格式】\n'
      '输入包含多组数据\n'
      '输入的第一行包含一个正整数 D表示数据组数\n'
      '后面2D行每行包含一个01串,每两行为一组数据,第 2i-1行为第i组数据的Ti,第2i行为第i组数据的Si,Si和Ti度均为n。')
n = int(input())
for i in range(n):
    #T是目标
    t = list(input())
    s = list(input())
    cnt,flag = 0,1
    for i in range(len(s)):
        if s[i]!=t[i]:
            if i-1>=0 and i+1<len(s) and s[i+1]!=s[i] and s[i-1]!=s[i]:
                s[i],cnt = s[i+1],cnt+1
            else:
                flag = 0
                break
    print(cnt if flag else -1)


W3T8-子矩阵:

   给定一个nxm(n行m列)的矩阵。
   设一个矩阵的价值为其所有数中的最大值和最小值的乘积。
   求给定矩阵的所有大小为axb的子矩阵的价值的和。
   【输入格式】
输入的第一行包含四个整数分别表示n,m,a,b,相邻整数之间使用一个空格分隔。
接下来n行每行包含m个整数,相邻整数之间使用一个空格分隔,表示矩阵中的每个数。

  • 可以先考虑得到每一行长度为b的窗口中的最大值和最小值,然后在这个基础上求出每一列长度为a的窗口的最大值和最小值。通过滑动窗口,把每个窗口的 max 和 min 放入数组,最后遍历两个数组,依次相乘累加到res。
print('【输入格式】\n'
      '输入的第一行包含四个整数分别表示n,m,a,b,相邻整数之间使用一个空格分隔。\n'
      '接下来n行每行包含m个整数,相邻整数之间使用一个空格分隔,表示矩阵中的每个数。\n')
n, m, a, b = map(int, input().split())
s,n_max, n_min, res = [[0] * (n) for _ in range(n)], [], [], 0
for i in range(0, n):
    s[i][0:m+1] = map(int, input().split())

#找出子矩阵的min和max
def get_min_and_max(start_row,start_line):
    num_max, num_min = [], []
    global a,b,s,n_max, n_min
    for i in range(start_row,start_row+a):
        max_d = max(s[i][start_line:start_line+b])
        min_d = min(s[i][start_line:start_line+b])
        num_max.append(max_d)
        num_min.append(min_d)
    n_max.append(max(num_max))
    n_min.append(min(num_min))
    return 0

for i in range(n-a+1):
    for j in range(m-b+1):
        get_min_and_max(i,j)
for i in range(len(n_max)):
    res+=n_max[i]*n_min[i]
print(res)
  • max_d = max(s[i][start_line:start_line+b])刚开始s[i]没写成了一维数组,报错了好几次,搞死我了

————————————————————————————————————————
   晚上11点,困,加油💪

W3(D12)——end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值