云计算百科
云计算领域专业知识百科平台

2026牛客寒假算法基础集训营5(BDFGJ)

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=1n​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 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")

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 2026牛客寒假算法基础集训营5(BDFGJ)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!