Submission #30595199


Source Code Expand

Copy
P = 998244353
p, g, ig = 998244353, 3, 332748118
W = [pow(g, (p - 1) >> i, p) for i in range(24)]
iW = [pow(ig, (p - 1) >> i, p) for i in range(24)]
def convolve(a, b):
def fft(f):
for l in range(k, 0, -1):
d = 1 << l - 1
U = [1]
for i in range(d):
U.append(U[-1] * W[l] % p)
for i in range(1 << k - l):
for j in range(d):
s = i * 2 * d + j
t = s + d
f[s], f[t] = (f[s] + f[t]) % p, U[j] * (f[s] - f[t]) % p
def ifft(f):
for l in range(1, k + 1):
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
P = 998244353
p, g, ig = 998244353, 3, 332748118
W = [pow(g, (p - 1) >> i, p) for i in range(24)]
iW = [pow(ig, (p - 1) >> i, p) for i in range(24)]

def convolve(a, b):
    def fft(f):
        for l in range(k, 0, -1):
            d = 1 << l - 1
            U = [1]
            for i in range(d):
                U.append(U[-1] * W[l] % p)

            for i in range(1 << k - l):
                for j in range(d):
                    s = i * 2 * d + j
                    t = s + d
                    f[s], f[t] = (f[s] + f[t]) % p, U[j] * (f[s] - f[t]) % p

    def ifft(f):
        for l in range(1, k + 1):
            d = 1 << l - 1
            U = [1]
            for i in range(d):
                U.append(U[-1] * iW[l] % p)

            for i in range(1 << k - l):
                for j in range(d):
                    s = i * 2 * d + j
                    t = s + d
                    f[s], f[t] = (f[s] + f[t] * U[j]) % p, (f[s] - f[t] * U[j]) % p

    n0 = len(a) + len(b) - 1
    if len(a) < 80 or len(b) < 80:
        ret = [0] * n0
        if len(a) > len(b): a, b = b, a
        for i, aa in enumerate(a):
            for j, bb in enumerate(b):
                ret[i+j] = (ret[i+j] + aa * bb) % p
        return ret
    
    k = (n0).bit_length()
    n = 1 << k
    a = a + [0] * (n - len(a))
    b = b + [0] * (n - len(b))
    fft(a), fft(b)
    for i in range(n):
        a[i] = a[i] * b[i] % p
    ifft(a)
    invn = pow(n, p - 2, p)
    for i in range(n0):
        a[i] = a[i] * invn % p
    del a[n0:]
    return a

class RelaxedMultiplication():
    # h = f * g
    def __init__(self):
        self.f = []
        self.g = []
        self.h = []
        self.n = 0
    
    def calc(self, l1, r1, l2, r2):
        self.h += [0] * (r1 + r2 - 1 - len(self.h))
        for i, a in enumerate(convolve(self.f[l1:r1], self.g[l2:r2]), l1 + l2):
            self.h[i] = (self.h[i] + a) % p
        
    def append(self, a, b):
        self.f.append(a)
        self.g.append(b)
        self.n += 1
        n = self.n
        m = (n + 1) & -(n + 1)
        s = 0
        if m <= n:
            a = 1
            while a <= m:
                self.calc(n - a, n, s, s + a)
                self.calc(s, s + a, n - a, n)
                s += a
                a <<= 1
        else:
            a = 1
            while a < m >> 1:
                self.calc(n - a, n, s, s + a)
                self.calc(s, s + a, n - a, n)
                s += a
                a <<= 1
            self.calc(n - a, n, s, s + a)
        return self.h[n-1]

P = 998244353
nn = 250025

fa = [1] * (nn+1)
fainv = [1] * (nn+1)
for i in range(nn):
    fa[i+1] = fa[i] * (i+1) % P
fainv[-1] = pow(fa[-1], P-2, P)
for i in range(nn)[::-1]:
    fainv[i] = fainv[i+1] * (i+1) % P

rm = RelaxedMultiplication()
ww, K = map(int, input().split())
www = [int(a) for a in input().split()]
F = [0] * ww
G = [0] * ww
F[0] = 1
for w in www:
    for i in range(w - 1, ww, w):
        G[i] += w

for i in range(ww - 1):
    h = rm.append(F[i], G[i])
    F[i+1] = (F[i+1] + h * fainv[i+1] % P * fa[i]) % P
    a = F[i+1]
    print(a)
    for j in range(i + 1, ww, i + 2):
        G[j] = (G[j] + (i + 2) * a) % P

Submission Info

Submission Time
Task H - Bullion
User Kiri8128
Language PyPy3 (7.3.0)
Score 600
Code Size 3306 Byte
Status AC
Exec Time 3043 ms
Memory 214976 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 2
AC × 25
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 02_medium_00.txt, 02_medium_01.txt, 02_medium_02.txt, 02_medium_03.txt, 02_medium_04.txt, 02_medium_05.txt, 02_medium_06.txt, 03_random_00.txt, 03_random_01.txt, 03_random_02.txt, 04_max_00.txt, 04_max_01.txt, 04_max_02.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 70 ms 68380 KB
00_sample_01.txt AC 60 ms 68356 KB
01_small_00.txt AC 66 ms 70656 KB
01_small_01.txt AC 55 ms 70092 KB
01_small_02.txt AC 59 ms 68824 KB
01_small_03.txt AC 63 ms 68856 KB
01_small_04.txt AC 60 ms 68692 KB
01_small_05.txt AC 63 ms 68364 KB
01_small_06.txt AC 60 ms 68648 KB
01_small_07.txt AC 60 ms 68272 KB
01_small_08.txt AC 58 ms 69052 KB
01_small_09.txt AC 64 ms 69180 KB
02_medium_00.txt AC 185 ms 79460 KB
02_medium_01.txt AC 151 ms 78636 KB
02_medium_02.txt AC 184 ms 80388 KB
02_medium_03.txt AC 180 ms 80136 KB
02_medium_04.txt AC 173 ms 79836 KB
02_medium_05.txt AC 175 ms 80132 KB
02_medium_06.txt AC 172 ms 79068 KB
03_random_00.txt AC 1718 ms 183748 KB
03_random_01.txt AC 2134 ms 203520 KB
03_random_02.txt AC 2848 ms 214548 KB
04_max_00.txt AC 3043 ms 214852 KB
04_max_01.txt AC 2993 ms 214976 KB
04_max_02.txt AC 2973 ms 214476 KB


2025-04-05 (Sat)
10:49:24 +00:00