B. 智乃的瓷砖
题目详情:
智乃想要在浴室密铺菱形图案的瓷砖,有两种瓷砖:/(斜杠)和 \(反斜杠)。墙面是一个 n 行 m 列的二维字符矩阵,规定:
- 左上角必须是
/; - 每一对上下相邻、左右相邻的瓷砖形状都不同。
请输出铺好瓷砖后的墙面形状。
输入描述:
一行输入两个正整数 n,m (1≤n,m≤100),表示墙面的行数和列数。
输出描述:
输出一个 n 行 m 列的字符矩阵,表示铺好瓷砖后的墙面形状。
参考代码:
n, m = map(int, input().split())
aList = [""] * n
i = 0
while i < n:
line = ""
j = 0
while j < m:
if (i + j) % 2 == 0:
line += "/"
else:
line += "\\"
j += 1
aList[i] = line
i += 1
for i in range(n):
print(aList[i])
D. 智乃的果子
题目详情:
智乃有 n 种不同的果子,第 i 种果子有 ci 个,重量为 wi。初始时共有 ∑ci 堆果子,每堆只包含 1 个果子,其重量等于该果子的重量。
智乃可以执行操作:将任意两堆果子合并成一堆,合并的代价等于合并后新堆的重量(即两堆重量之和)。显然,若有 m 堆果子,进行 m−1 次合并后,所有果子会被合并成同一堆。
请计算把所有果子合并成一堆的最小代价之和,并将答案对 10^9+7 取模后输出。
输入描述:
- 第一行输入一个正整数 n (1≤n≤10^5),表示果子的种类数;
- 之后 n 行,第 i 行输入两个正整数 ci,wi (1≤ci,wi≤10^6),表示第 i 种果子的个数和重量。
输出描述:
仅一行一个正整数,表示将所有果子合并成一堆的最小代价之和,对 10^9+7 取模后的结果。
参考代码:
import sys
import heapq
MOD=10**9+
data=sys.stdin.read().split()
ptr=
n=(data[ptr])
ptr+=
aList=[]
i (n):
c,w=(,data[ptr:ptr+])
ptr+=
heapq.heappush(aList,[w,c])
ans=
aList:
w,c=heapq.heappop(aList)
aList aList[][]==w:
c+=heapq.heappop(aList)[]
c==:
aList:
w2,c2=heapq.heappop(aList)
new=w+w2
ans=(ans+new)%MOD
heapq.heappush(aList,[new,])
c2>:
heapq.heappush(aList,[w2,c2-])
:
new=*w
q=c//
d=c&
ans=(ans+new*q)%MOD
heapq.heappush(aList,[new,q])
d:
heapq.heappush(aList,[w,])
(ans)


