蓝桥23年真题演练(python A组)

蓝桥23年真题演练(python A组)

23年

T1:
image-20240408203913118

# 年是日和月的倍数 【基础语法】
n=[1,3,5,7,8,10,12 ] # 31 days
count=0
for i in range(2000,2000000):
    flag=0
    if (i%4==0 and i%100!=0) or i%400==0: # 闰年
        flag=1
    for m in range(1,13):
        max=30
        if m in n:
            max=31
        elif m==2:
            max=28+flag
        for r in range(1,max+1):
            if i%m==0 and i%r==0:
                count+=1
count+=1
print(count)
# 这个题目是填空题 复杂度太高了,会超时

T2:

image-20240408203937966

# 分糖果 【考点dfs】
class a():
    sum=0
    def dfs(self,n,ta,tb):
        if n==7: # 有几个小朋友,dfs的深度就是几
            if ta+tb>=2 and ta+tb<=5:
                self.sum+=1
            return
        for i in range(ta+1): # 遍历i,j的取值范围
            for j in range(tb+1):
                if i+j>=2 and i+j<=5:
                    self.dfs(n+1,ta-i,tb-j)

if __name__=='__main__':
    a=a()
    a.dfs(1,9,16)
    print(a.sum)

T3:

image-20240408204009485

# 三国游戏 【dfs】
n=int(input())
A=list(map(int,input().split()))
B=list(map(int,input().split()))
C=list(map(int,input().split()))
class a():
    max=0
    def dfs(self,x,y,z,i,shi):
        if i==n and (x+y<z or x+z<y or y+z<x):
            self.max=max(self.max,shi)
            return
        if i<n:
            self.dfs(x+A[i],y+B[i],z+C[i],i+1,shi+1)
            self.dfs(x,y,z,i+1,shi)
if __name__=='__main__':
    a=a()
    a.dfs(0,0,0,0,0)
    if a.max==0:
        print(-1)
    else:
        print(a.max)

T4:

image-20240408205845533

image-20240408205858642

#平均 【二维列表】
n=int(input())
cost=[[]for i in range(n)] #二维列表
num=[0]*10
for i in range(n):
    a,b=map(int,input().split())
    cost[a-1].append(b) # 对数据进行分组
    num[a-1]+=1 # 统计每组的个数
q=0
for i in range(n):
    if num[i]>n/10:
        cost[i].sort() # 从小到大排序
        for m in range (int(num[i]-n/10)):
            q+=cost[i][m]
print(q) 

T5:

image-20240409113634891

image-20240409113650859

# 翻转 【基础语法】
n=int(input())

for i in range(n):
    T=list(input())
    S=list(input())
    count=0
    for j in range (1,len(S)-1):
        if S[j]==T[j]:
            continue
        elif S[j-1]==S[j+1] and S[j]!=S[j+1]:
            S[j]=S[j+1]
            count+=1
    if S==T:
        print(count)
    else:
        print(-1)

T6:

image-20240409141644690

# 子矩阵 【窗口滑动+动态规划】
# 方法一:会超时
n,m,a,b=map(int,input().split())
matrix=[[]for i in range(n)]
for i in range(n):
    matrix[i]=list(map(int,input().split()))

def matrix_value_sum(n, m, a, b, matrix):
    MOD = 998244353
    def find_max_min_in_submatrix(i, j): # 子矩阵最大值和最小值
        max_val = -float('inf') # 负无穷
        min_val = float('inf') # 正无穷
        for x in range(i, i + a):
            for y in range(j, j + b):
                max_val = max(max_val, matrix[x][y])
                min_val = min(min_val, matrix[x][y])
        return max_val, min_val

    total_sum = 0
    for i in range(n - a + 1):
        for j in range(m - b + 1):
            max_val, min_val = find_max_min_in_submatrix(i, j)
            total_sum += max_val * min_val
            total_sum %= MOD

    return total_sum

if __name__=='__main__':
    print(matrix_value_sum(n, m, a, b, matrix))
#方法二 90%概率吧
# 子矩阵 【窗口滑动+动态规划】
n,m,a,b=map(int,input().split())
matrix=[[]for i in range(n)]
for i in range(n):
    matrix[i]=list(map(int,input().split()))

def optimized_matrix_value_sum(n, m, a, b, matrix):
    MOD = 998244353
    max_matrix = [[0 for _ in range(m)] for _ in range(n)] # 每个位置的最大值
    min_matrix = [[0 for _ in range(m)] for _ in range(n)] # 每个位置的最小值
    for i in range(n): #通过比较当前元素、上方元素、左方元素、左上方元素,更新max_matrix和min_matrix
        for j in range(m):
            max_matrix[i][j] = matrix[i][j]
            min_matrix[i][j] = matrix[i][j]
            if i > 0:
                max_matrix[i][j] = max(max_matrix[i][j], max_matrix[i-1][j])
                min_matrix[i][j] = min(min_matrix[i][j], min_matrix[i-1][j])
            if j > 0:
                max_matrix[i][j] = max(max_matrix[i][j], max_matrix[i][j-1])
                min_matrix[i][j] = min(min_matrix[i][j], min_matrix[i][j-1])
            if i > 0 and j > 0:
                max_matrix[i][j] = max(max_matrix[i][j], max_matrix[i-1][j-1])
                min_matrix[i][j] = min(min_matrix[i][j], min_matrix[i-1][j-1])

    total_sum = 0
    for i in range(a-1, n):
        for j in range(b-1, m):
            max_val = max_matrix[i][j]
            min_val = min_matrix[i][j]
            if i >= a:
                max_val = max(max_val, max_matrix[i-a][j])
                min_val = min(min_val, min_matrix[i-a][j])
            if j >= b:
                max_val = max(max_val, max_matrix[i][j-b])
                min_val = min(min_val, min_matrix[i][j-b])
            if i >= a and j >= b:
                max_val = max(max_val, max_matrix[i-a][j-b])
                min_val = min(min_val, min_matrix[i-a][j-b])
            
            total_sum += max_val * min_val
            total_sum %= MOD

    return total_sum

if __name__ == "__main__":
    print(optimized_matrix_value_sum(n, m, a, b, matrix))

T7:

image-20240409154204970

思路:

image-20240409162558783

# 阶乘和
n=int(input())
a=list(map(int,input().split()))
a.sort()
from collections import defaultdict #默认字典
Map=defaultdict(int)

for i in a:
  Map[i]+=1

m=a[0]#最开始一定可以合成
while True:
  x=Map[m]
  if x%(m+1)==0:
    Map[m+1]+=x//(m+1)
    m+=1
  else:
    break

print(m)

**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值