打表时,无法通过,示例都过不了 ,取消了打表方式的 Python 代码:
mod = 998244353    # 取余数
    
def apow(fac, n):
    res = 1
    while n:
        if n & 1:
            res = (res * fac) % mod
        n >>= 1
        fac = (fac * fac) % mod
    return res % mod

# 打表
# table = [0, 1]
# for i in range(2, int(1e7-3)):
#     table.append((table[-1] * i) % mod)
    
T = int(input())
for _ in range(T):
    n = int(input())
    sum_li = (n*(1+n)//2) % mod
    sum_li = (sum_li * sum_li) % mod
    fac = 1
    for i in range(2, n+1):
        fac *= i
        fac %= mod
    mul_li = apow(fac, 2 * n)
    # mul_li = apow(table[n], 2 * n)
    print(sum_li, mul_li)
补充一下:之前一个地方少乘了一个n
研究了一下,是打表的问题:
1. 不打表的话通过30.0% (运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。)
2. 打表的话通过10.0%(运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。)
看来牛客对python不友好啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~