python位运算做法求助
查看原帖
python位运算做法求助
555065
ChrysanthBlossom楼主2022/5/1 18:32

为什么我提交上去后TLE一大堆

def readline(*number):
    if not number:
        number = [0]
    number = list(number)
    inp = input().split()
    rtn = []
    for index,i in enumerate(inp):
        if index == number[0] - 1:
            rtn.append(int(i))
            number.pop(0)
        else:
            rtn.append(i)
    if len(rtn) == 1:
        return rtn[0]
    return rtn


def spt(l, r):
    lst = (1 << r) - 1 & num
    mid = (1 << l - r + 1) - 1 & (num >> r)
    fst = num >> l + 1
    return fst, mid, lst


def join(fst, mid, lst, l, r):
    return (fst << l + 1) | (mid << r) | lst


def chg(l,r):
    global num
    fst, mid, lst = spt(l, r)
    num = join(fst, mid ^ (1 << l - r + 1) - 1, lst, l, r)


def i2b(nu):
    c = 0
    while nu:
        c += 1
        nu &= nu - 1
    return c


def prt(l, r):
    _, mid, _ = spt(l, r)
    print(i2b(mid))


n, m = readline(1,2)
num = 0
for _ in range(m):
    op, l, r = readline(1, 2, 3)
    l = n - l + 1
    r = n - r + 1
    if op:
        prt(l,r)
    else:
        chg(l,r)

2022/5/1 18:32
加载中...