蓝桥23年真题演练(python A组)
23年
T1:
# 年是日和月的倍数 【基础语法】
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:
# 分糖果 【考点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:
# 三国游戏 【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:
#平均 【二维列表】
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:
# 翻转 【基础语法】
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:
# 子矩阵 【窗口滑动+动态规划】
# 方法一:会超时
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:
思路:
# 阶乘和
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)
**