B.智乃的瓷砖
链接:B-智乃的瓷砖_2026牛客寒假算法基础集训营5
题目详情:
智乃想要在浴室密铺菱形图案的瓷砖,有两种瓷砖:/(斜杠)和 \\(反斜杠)。墙面是一个 n 行 m 列的二维字符矩阵,规定:
-
左上角必须是 /;
-
每一对上下相邻、左右相邻的瓷砖形状都不同。
请输出铺好瓷砖后的墙面形状。
输入描述:
一行输入两个正整数 n,m (1≤n,m≤100),表示墙面的行数和列数。
输出描述:
输出一个 n 行 m 列的字符矩阵,表示铺好瓷砖后的墙面形状。
代码:
n, m = map(int, input().split())
aList = [""] * n
i = 0
while i < n:
j = 0
line = ""
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。初始时共有 ∑i=1nci 堆果子,每堆只包含 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 heapq
MOD=10**9+7
data=sys.stdin.read().split()
ptr=0
n=int(data[ptr])
ptr+=1
aList=[]
for i in range(n):
c,w=map(int,data[ptr:ptr+2])
ptr+=2
heapq.heappush(aList,[w,c])
ans=0
while aList:
w,c=heapq.heappop(aList)
while aList and aList[0][0]==w:
c+=heapq.heappop(aList)[1]
if c==1:
if not aList:
break
w2,c2=heapq.heappop(aList)
new=w+w2
ans=(ans+new)%MOD
heapq.heappush(aList,[new,1])
if c2>1:
heapq.heappush(aList,[w2,c2-1])
else:
new=2*w
q=c//2
d=c&1
ans=(ans+new*q)%MOD
heapq.heappush(aList,[new,q])
if d:
heapq.heappush(aList,[w,1])
print(ans)
F.智乃的算法竞赛群友
题目详情:
智乃在算法竞赛群发言,希望用长度为 n 的字符串组成一句话,每包含一个子串 qcjjkkt 可获得 a 点快乐值,每包含一个子串 td 可获得 b 点快乐值。子串可以重叠(例如 qcjjkktd 可同时包含 qcjjkkt 和 td)。
求这次发言能得到的最大快乐值。
输入描述:
第一行输入整数 T (1≤T≤10^5),表示测试数据组数;
每组数据输入三个正整数 n,a,b (1≤n,a,b≤10^9),分别表示字符串长度、qcjjkkt 的快乐值、td 的快乐值。
输出描述:
对于每组数据,输出一行整数,表示能得到的最大快乐值。
代码:
def demo():
n, a, b = map(int, input().split())
ans=0
for k in [0,n//6,n//7,n//8]:
for i in range(0,4):
x=k+i
if x*7<=n:
y=n-x*7
if x>=y:
ans=max(ans,x*a+y*b)
if x*6<=n:
y=(n-x*6)//2
if y>=x:
ans=max(ans,x*a+y*b)
return ans
t = int(input())
while t:
t -= 1
print(demo())
G.智乃的箭头魔术
题目详情:

智乃有一张长度为 2 单位、宽度为 1 单位的纸,上面画了两个箭头。她将这张纸沿虚线将右侧图形对折到左边,并用胶水将两个箭头黏在一起,使其成为一个正反两面的正方形折纸玩具。

-
初始状态:箭头指向右上方向(无论正反哪一面等价),对应状态 0。
-
操作定义(共 6 种,编号 0-5,所有翻转 / 旋转均相对于观察者的固定空间参考系):
-
操作 0:沿中垂线(| 形竖线)翻转
-
操作 1:沿主对角线(/ 形对角线)翻转
-
操作 2:沿水平线(- 形横线)翻转
-
操作 3:沿副对角线(\\ 形对角线)翻转
-
操作 4:顺时针旋转 90 度
-
操作 5:逆时针旋转 90 度
-
所有翻转轴与旋转方向均相对于观察者的固定空间参考系,不随纸张的变换而改变。
接下来,智乃将进行 100 次操作,每次操作完成后,智乃都会询问你当前箭头的状态,状态即在某次操作后,箭头的朝向,如下图所示:
- 0 代表右上;
- 1 代表右下;
- 2 代表左下;
- 3 代表左上。

现在给出 100 次真实操作序列:0112233445142015320125410214530214510214102302142025101203201451451522302514203214510021454101002532
请输出一个长度为 100 的字符串,第 i 位表示执行完第 i 次操作后箭头的状态(仅包含数字 {0,1,2,3})。
输入描述:
本题不需要处理输入,判题时也不会提供任何程序输入。
输出描述:
在一行上输出一个长度为 100、仅包含数字 {0,1,2,3} 的字符串,表示每次操作完成后箭头的状态。(建议在提交语言中选择 PHP 直接提交答案内容,不必编写输出答案的程序。)
代码:
print("3132333010010310230010130130330130312312210210010321300120122322322101123223211001003013030031210332")
J.智乃的幻方
题目详情:
如果一个 3 行 3 列的矩阵的行、列、两条对角线上的数字之和相同,且 9 个位置上的数字为 1-9 出现各一次,则称这个 3 行 3 列的矩阵为一个三阶幻方。
现在智乃有一个 3 行 3 列的矩阵,请你告诉她这个矩阵是否满足幻方的条件,如果满足输出 Yes,否则输出 No。
输入描述:
一共三行,第 i 行输入三个正整数 ai,1,ai,2,ai,3(1≤ai,j≤9),表示矩阵第 i 行的数字。
输出描述:
如果矩阵满足条件,输出 Yes;否则输出 No。
代码:
aList=[list(int(x) for x in input().split()) for _ in range(3)]
aSet=set()
bList = []
for i in range(3):
for j in range(3):
bList.append(aList[i][j])
if sorted(bList) != [1, 2, 3, 4, 5, 6, 7, 8, 9]:
print("No")
else:
for i in range(3):
aSet.add(sum(aList[i]))
aSet.add(aList[0][0]+aList[1][1]+aList[2][2])
aSet.add(aList[0][2]+aList[1][1]+aList[2][0])
aSet.add(aList[0][0]+aList[1][0]+aList[2][0])
aSet.add(aList[0][1]+aList[1][1]+aList[2][1])
aSet.add(aList[0][2]+aList[1][2]+aList[2][2])
if len(aSet)==1:
print("Yes")
else:
print("No")
网硕互联帮助中心



评论前必须登录!
注册