第一次用Python写题解,可能会有疏漏之处
官方讲解 讲解
A题
很简单的一道语法题,直接相加输出即可
li = list(map(int, input().split()))
print(sum(li))
B题
取出所有连续长度2字串,排序输出即可
s = input()
li = []
for i in range(len(s) - 1):
j = i + 1
ss = s[i] + s[j]
li.append(ss)
nli = sorted(li)
for i in range(len(nli)):
print(nli[i])
C题
一道模拟题吧,优化的话就是记录高度(两种写法),然后按照高度把上面的砖块炸掉(和炸下面是一样的)
n, m, k = map(int, input().split())
li = [['*'] * m for i in range(n)]
h = [n] * m # 注意这个地方影响后面的写法
for _ in range(k):
x, y = map(int, input().split()) # 下标从1开始的,后面操作别忘了-1
if li[x - 1][y - 1] == '*':
li[n - h[y - 1]][y - 1] = '.'
h[y - 1] -= 1
for row in li:
print(''.join(row))
D题
两种解法(双指针 / 前缀和 + 二分),一前一后,需要注意统计数量的细节
n, k = map(int, input().split())
li = list(map(int, input().split()))
l, summ, cnt = 0, 0, 0
for r in range(n):
summ += li[r]
while summ >= k: # 当左指针满足条件时,把左指针移到边界处
summ -= li[l]
l += 1
cnt += l # 脑补或者画图
print(cnt)
E题
一道数学题,主要是找规律,手写快速幂稳过
def pow(b, v):
r = 1
while v > 0:
if v % 2 == 1:
r = r * b % mod
v //= 2
b = b * b % mod
return r
n, k = map(int, input().split())
mod = int(1e9 + 7)
# x奇数能取(k + 1) // 2个,y偶数能取k // 2个,要模拟三个位置
x, y = (k + 1) // 2, k // 2
n1 = (n + 2) // 3
n2 = (n + 1) // 3
n3 = n // 3
ans = pow(y, n)
ans += pow(y, n1) * pow(x, n - n1) % mod
ans += pow(y, n2) * pow(x, n - n2) % mod
ans += pow(y, n3) * pow(x, n - n3) % mod
print(ans % mod)