3 条题解

  • 1
    @ 2024-5-29 19:30:04

    来发数学,无列表。

    vp,q = map(int,input().split())
    for i in range(q):
        op, j = map(int, input().split())
        v = vp//(3**j) # 在j之前的位数所代表的值,删去后面所有的数
        vo = vp%(3**j) # 在j之后的位数所代表的值
        if op==3 :
            if (v%3==1): # j位是1
                v = v+1
            elif (v%3==2):  # j位是2
                v = v-1
        else :
            # 瞪眼法可知,一二情况即为j位往上数两位。
            v = (v%3+op)%3+v//3*3
    
        vp = v*(3**j)+vo  # 计算最后的数
        print(vp)
    

    信息

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