3 条题解

  • 2
    @ 2024-5-27 16:58:21
    V, q = map(int, input().split())
    
    # s 用来存储 V 转换为三进制后的每一位,列表中的索引对应三进制的位数
    s = []
    
    # n 用以记录 V 的三进制位数
    n = 0
    
    # 将 V 转换为三进制数表示,并存储在列表 s 中
    while V > 0:
        s.append(V % 3)
        V = V // 3
        n += 1
    
    # 扩充列表 s 到足够的长度,以确保即便后续有高位的操作也能正确执行
    for i in range(1000):
        s.append(0)
    
    # 处理 q 次操作
    for j in range(q):
        op, i = map(int, input().split())
        # 更新 n,保证 n 始终为操作的最大位数
        n = max(n, i)
        # 操作一:s[i] 的值按照 0→1→2→0 循环变化
        if op == 1:
            s[i] = (s[i] + 1) % 3
        # 操作二:s[i] 的值按照 0→2→1→0 循环变化
        if op == 2:
            s[i] = (s[i] + 2) % 3
        # 操作三:s[i] 的值在 1 和 2 之间变化,0保持不变
        if op == 3:
            if s[i] == 1:
                s[i] = 2
            elif s[i] == 2:
                s[i] = 1
    
        # 操作完后,计算从三进制数转换回十进制后的结果
        res = 0
        k = 1
        for i in range(n + 1):
            res += k * s[i]
            k = k * 3
        # 输出每次操作后的三进制数对应的十进制数
        print(res)
    

    信息

    ID
    933
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    671
    已通过
    100
    上传者