# 2024第十六届蓝桥杯模拟赛(第三期)-Python题解
# 自己改注释
# -----------------------1------------------------
# def isprime(x):
# if x < 2:
# return False
# for i in range(2, int(x ** 0.5) + 1):
# if x % i == 0:
# return False
# return True
#
#
# n = 2024
# for i in range(n, 1, -1):
# if isprime(i) and n % i == 0:
# print(i)
# break
# # 答案:23
# -----------------------2------------------------
# import math
# print(2024*1024//math.gcd(2024, 1024))
# print(math.lcm(2024, 1024))
# # 答案:259072
# -----------------------3------------------------
# def isprime(x):
# if x < 2:
# return False
# for i in range(2, int(x ** 0.5) + 1):
# if x % i == 0:
# return False
# return True
#
#
# n = 2024
# res = 0
# for i in range(n, 1, -1):
# if isprime(i) and n % i == 0:
# res += i
# print(res)
# # 答案:36
# -----------------------4------------------------
# def isprime(x):
# if x < 2:
# return False
# for i in range(2, int(x ** 0.5) + 1):
# if x % i == 0:
# return False
# return True
#
#
# n = 2024
# for i in range(n, 1, -1):
# if isprime(i):
# print(i)
# break
# # 答案:2017
# -----------------------5------------------------
# import math
# cnt = 0
# num = 0
# while cnt < 2024:
# num += 1
# if math.gcd(num, 2024) == 1:
# cnt += 1
# print(num)
# # 4655
# -----------------------6------------------------
# s = "ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN"
# n = len(s)
# res = "A"
# cnt = 0
# for i in range(n - 1):
# for j in range(i + 1, min(i + 11, n)):
# now = s[i:j]
# now_len = j - i
# # print(now, now_len, s.count(now))
# if now_len * s.count(now) > cnt:
# cnt = now_len * s.count(now)
# res = now
# elif now_len * s.count(now) == cnt and now < res:
# res = now
# print(res)
# # NQN
# -----------------------7------------------------
# # 1.深搜:
# def dfs(index, current, count_ones):
# global result
# # 当index == 24时,意味着我们已经构造了一个长度为24的合法字符串
# if index == 24:
# result += 1
# return
#
# if index > 4 and current[index - 5] == "1":
# count_ones -= 1
#
# # 当前选0的情况
# if count_ones <= 3: # 只有当当前1的数量 <= 3时,我们才可以继续递归
# dfs(index + 1, current + "0", count_ones)
#
# # 当前选1的情况
# if count_ones + 1 <= 3: # 同样需要检查,不能超过3个1
# dfs(index + 1, current + "1", count_ones + 1)
#
#
# result = 0
# dfs(0, "", 0)
# print(result)
# # 2.暴力:
# def check(s):
# n = len(s)
# if n < 24:
# s = "0" * (24 - n) + s
# for i in range(20):
# if s[i:i + 5].count("1") > 3:
# return False
# return True
#
#
# res = 0
# for i in range(1 << 24):
# s = bin(i)[2:]
# if check(s):
# res += 1
# print(res)
# 答案:2963628
# -----------------------8------------------------
# n = int(input())
# m = int(input())
# a = int(input())
# print(n * m * a)
# -----------------------9------------------------
# def II():
# return int(input())
#
# def MII():
# return map(int,input().split())
#
# def LMII():
# return list(MII())
#
# n = II()
# data = LMII()
# Max = -1
# res = 0
# for x in data:
# if x > Max:
# res += 1
# Max = x
# print(res)
# -----------------------10------------------------
# a = input()
# b = input()
# c = input()
# d = input()
# lst = [a, b, c, d]
# lst.sort()
# print(*lst, sep="")
# -----------------------11------------------------
# def II():
# return int(input())
#
#
# def MII():
# return map(int, input().split())
#
#
# def LMII():
# return list(MII())
#
#
# n = II()
# cm = LMII()
# m = II()
# lw = LMII()
# res = 0
# cnt = 0
# for i in range(n):
# if cm[i] <= lw[cnt]:
# res += 1
# cnt += 1
# else:
# while cm[i] > lw[cnt]:
# cnt += 1
# if cnt == m:
# exit(print(res))
# res += 1
# cnt += 1
# if cnt == m:
# break
# print(res)
# -----------------------12------------------------
# def II():
# return int(input())
#
#
# def MII():
# return map(int, input().split())
#
#
# def LMII():
# return list(MII())
#
#
# def solve(n, m, a):
# # 计算二维前缀和
# prefix = [[0] * (m + 1) for _ in range(n + 1)]
#
# # 构建前缀和矩阵
# for i in range(1, n + 1):
# for j in range(1, m + 1):
# prefix[i][j] = a[i - 1][j - 1] + prefix[i - 1][j] + prefix[i][j - 1] - prefix[i - 1][j - 1]
#
# def get_sum(x1, y1, x2, y2):
# # 获取矩形区域(x1, y1)到(x2, y2)的和
# return prefix[x2 + 1][y2 + 1] - prefix[x1][y2 + 1] - prefix[x2 + 1][y1] + prefix[x1][y1]
#
# max_sum = float('-inf')
#
# # 枚举所有可能的r1, r2
# for r1 in range(1, n - 1):
# for r2 in range(r1 + 1, n):
# # 枚举所有可能的c1, c2
# for c1 in range(1, m - 1):
# for c2 in range(c1 + 1, m):
# # 计算十字形区域的和
# total_sum = 0
#
# # 计算行部分的和
# total_sum += get_sum(r1, c1, r2, c2) # 中心区域
# total_sum += get_sum(r1, 0, r2, c1 - 1) # 左侧区域
# total_sum += get_sum(r1, c2 + 1, r2, m - 1) # 右侧区域
#
# # 计算列部分的和
# total_sum += get_sum(0, c1, r1 - 1, c2) # 上方区域
# total_sum += get_sum(r2 + 1, c1, n - 1, c2) # 下方区域
#
# # 更新最大值
# max_sum = max(max_sum, total_sum)
#
# return max_sum
#
# n, m = MII()
# data = []
# for i in range(n):
# data.append(LMII())
#
# print(solve(n, m, data))
以上代码仅供参考,不保证完全正确 ,下面是题目描述
如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。
请问, 2024 的最大的质因数是多少?
对于两个整数 a, b,既是 a 的整数倍又是 b 的整数倍的数称为 a 和 b 的公倍数。公倍数中最小的正整数称为 a 和 b 的最小公倍数。
请问, 2024 和 1024 的最小公倍数是多少?
如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。
请问, 2024 的所有质因数的和是多少?
请问,在不超过 2024 的数中,最大的质数是多少?
如果两个整数 a, b 除了 1 以外,没有其它的公约数,则称整数 a 与 b 互质。
请问,与 2024 互质的数中(包括1),第 2024 小的数是多少?
对于字符串 S=ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN ,请找到 S 的一个长度不超过 10 的子串 A,使得(A的长度)乘以(A在S中出现的次数)最大。
请问这个子串是什么?(如果有多个满足条件的,请回答字典序最小的)。
如果一个字符串中只包含字符 0 和字符 1,则称为一个 01 串(包含全为 0 的串和全为 1 的串)。
请问有多少个长度为 24 的 01 串,满足任意 5 个连续的位置中不超过 3 个位置的值为 1 。
小蓝种了一块玉米地,玉米地长 n 米,宽 m 米,每平方米产玉米 a 千克。请问小蓝的玉米地一共能产多少千克玉米?
输入三行。第一行包含一个正整数 n ,第二行包含一个正整数 m ,第三行包含一个正整数 a 。
输出一行,包含一个整数,表示答案。
20
24
900
432000
对于所有评测用例,1 <= n <= 1000, 1 <= m <= 1000, 1 <= a <= 2000。
小蓝有一个数组 a[1], a[2], ..., a[n], 一个“再创新高”的位置是指一个位置 p ,a[p] 的值比之前每个位置的值都大。
请求出小蓝的数组中有多少个再创新高的位置。
输入的第一行包含一个整数 n 。
第二行包含 n 个整数,相邻数之间使用一个空格分隔,依次表示 a[1], a[2], ..., a[n] 。
输出一行,包含一个整数,表示答案。
8
1 2 3 4 5 6 6 6
6
9
3 2 1 6 5 4 9 8 7
3
对于 30% 的评测用例,1 <= n <= 100,0 <= a[i] <= 1000。
对于 60% 的评测用例,1 <= n <= 1000,0 <= a[i] <= 1000。
对于所有评测用例,1 <= n <= 10000,0 <= a[i] <= 1000000。
给定四个字符串 a, b, c, d,请将这四个字符串按照任意顺序依次连接拼成一个字符串。
请问拼成的字符串字典序最小是多少?
输入四行,每行包含一个字符串。
输出一行包含一个字符串,表示答案。
LAN
LAN
QIAO
BEI
BEILANLANQIAO
对于所有评测用例,输入的字符串非空串,由大写字母组成,长度不超过 1000 。
蓝桥村正在给村民们发放礼物。礼物通过一个礼物发放机完成。
村民们在机器前排着队领取礼物。
每个礼物有一个价值 v[i] ,有的高,有的低。每位村民有自己对于礼物的期望值 e[i] 。
礼物发放机每次会显示一个礼物,如果礼物的价值大于等于村民的期望值,村民就会高兴地把礼物拿走,并离开礼物发放机。如果礼物的价值比村民的期望值低,村民会让这个礼物取消,并让礼物发放机显示下一个礼物,并重新检查是否满足期望。村民会重复让礼物发放机显示下⼀个礼物,直到礼物发放机没有更多可以显示的礼物或礼物的价值大于等于自己的期望值。
如果礼物发放机中的所有礼物都显示完了,那么还没领到礼物的村民就无法领取礼物了。
如果所有的村民都领到了礼物,而礼物发放机还有礼物显示,村民们也不会再领取礼物。
现在,小蓝知道了每位村民的期望值,也知道了礼物发放机上礼物的显示顺序,请问总共有多少村民拿到了礼物?
输入的第一行包含一个整数 n ,表示村民的个数。
第二行包含 n 个整数,相邻数之间使用一个空格分隔,依次表示排队的每位村民的期望值 e[i] 。
第三行包含一个整数 m ,表示礼物发放机会显示的礼物个数。
第四行包含 m 个整数,相邻数之间使用一个空格分隔,依次表示礼物发放机显示的礼物的价值 v[i] 。
输出一行,包含一个整数,表示答案。
6
6 5 5 3 6 0
9
9 9 8 2 4 4 3 5 3
4
前 4 位村民依次取到了第 1, 2, 3, 5 件礼物。后面的礼物未能满足第 5 位村民。
对于 30% 的评测用例,1 <= n, m <= 20 , 0 <= e[i], v[i] <= 100 。
对于 60% 的评测用例,1 <= n, m <= 300 , 0 <= e[i], v[i] <= 10000 。
对于所有评测用例,1 <= n, m <= 10000 , 0 <= e[i], v[i] <= 1000000 。
小蓝有一个 n 行 m 列的矩阵 a[i][j] ,他想着矩阵中找出一个“十”字形状的区域,使得区域内的值的和最大。
一个“十”字形状的区域可以由两个行号 r1 、 r2 和两个列号 c1 、 c2 表示。“十”字的区域内包括第 r1 行到 r2 行的所有元素,以及第 c1 列到 c2 列的所有元素,既不在这几行也不在这几列的元素不在区域内。
为了保证是一个“十”字的形状,必须满足 1 < r1 <= r2 < n,1 < c1 <= c2 < m。
输入的第一行包含两个整数 n, m ,分别表示行数和列数。
接下来 n 行,每行包含 m 个整数,相邻数之间使用一个空格分隔,依次表示矩阵的每行每列的值,本部分的第 i 行第 j 列表示 a[i][j] 。
输出一行包含一个整数,表示最大的和。
5 6
1 -1 2 -2 3 -3
-1 2 -2 3 -3 4
2 -2 3 -3 4 -4
-2 3 -3 4 -4 5
3 -3 4 -4 5 -5
14
有两种方法可以得到最大的和。第一种是取 r1=2, r2=4, c1=3, c2=5,第二种是取 r1=2, r2=4, c1=5, c2=5 。
对于 30% 的评测用例,3 <= n, m <= 30 ,-1000 <= a[i][j] <= 1000 。
对于 60% 的评测用例,3 <= n, m <= 100 ,-1000 <= a[i][j] <= 1000 。
对于所有评测用例,3 <= n <= 100, 3 <= m <= 5000 ,-1000 <= a[i][j] <= 1000 。