Submission #1051733


Source Code Expand

omega = 103
n = 2**18
P = 5880*n + 1
rev = pow(omega, P-2, P)

def bit_reverse(d):
    n = len(d)
    ns = n>>1; nss = ns>>1
    ns1 = ns + 1
    i = 0
    for j in xrange(0, ns, 2):
        if j<i:
            d[i], d[j] = d[j], d[i]
            d[i+ns1], d[j+ns1] = d[j+ns1], d[i+ns1]
        d[i+1], d[j+ns] = d[j+ns], d[i+1]
        k = nss; i ^= k
        while k > i:
            k >>= 1; i ^= k
    return d

def fmt_bu(A, n, base, half, Q):
    N = n
    m = 1
    while n>1:
        n >>= 1
        w = pow(base, n, Q)
        wk = 1
        for j in xrange(m):
            for i in xrange(j, N, 2*m):
                U = A[i]; V = (A[i+m]*wk) % Q
                A[i] = (U + V) % Q
                A[i+m] = (U + V*half) % Q
            wk = (wk * w) % Q
        m <<= 1
    return A

def fmt(f, l, Q=P):
    if l == 1: return f
    A = f[:]
    bit_reverse(A)
    return fmt_bu(A, n, omega, pow(omega, n/2, Q), Q)

def ifmt(F, l, Q=P):
    if l == 1: return F
    A = F[:]
    bit_reverse(A)
    f = fmt_bu(A, n, rev, pow(rev, n/2, Q), Q)
    n_rev = pow(n, Q-2, Q)
    return [(e * n_rev) % Q for e in f]

def convolute(a, b, l, Q=P):
    A = fmt(a, l, Q)
    B = fmt(b, l, Q)
    C = [(s * t) % Q for s, t in zip(A, B)]
    c = ifmt(C, l, Q)
    return c

import sys
inp = map(int, sys.stdin.read().split())
m = inp[0]
f = inp[1::2] + [0]*(n-m)
g = inp[2::2] + [0]*(n-m)

fg = convolute(f, g, m)
sys.stdout.write("0\n")
sys.stdout.write("\n".join(map(str, fg[:2*m-1])))
sys.stdout.write("\n")

Submission Info

Submission Time
Task C - 高速フーリエ変換
User yaketake08
Language Python (2.7.3)
Score 100
Code Size 1570 Byte
Status AC
Exec Time 3704 ms
Memory 56244 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 1
AC × 33
Set Name Test Cases
Sample 00_sample_01
All 00_sample_01, 01_00_01, 01_01_19, 01_02_31, 01_03_22, 01_04_31, 01_05_40, 01_06_15, 01_07_39, 01_08_28, 01_09_30, 01_10_23, 01_11_33, 01_12_11, 01_13_28, 01_14_41, 01_15_26, 01_16_49, 01_17_34, 01_18_02, 01_19_33, 01_20_29, 02_00_51254, 02_01_82431, 02_02_17056, 02_03_34866, 02_04_6779, 02_05_65534, 02_06_65535, 02_07_65536, 02_08_65537, 02_09_65538, 02_10_100000
Case Name Status Exec Time Memory
00_sample_01 AC 3282 ms 53496 KB
01_00_01 AC 139 ms 32504 KB
01_01_19 AC 3274 ms 54652 KB
01_02_31 AC 3311 ms 54652 KB
01_03_22 AC 3277 ms 54704 KB
01_04_31 AC 3298 ms 54652 KB
01_05_40 AC 3300 ms 54692 KB
01_06_15 AC 3282 ms 54700 KB
01_07_39 AC 3301 ms 54696 KB
01_08_28 AC 3298 ms 54652 KB
01_09_30 AC 3314 ms 53420 KB
01_10_23 AC 3286 ms 54704 KB
01_11_33 AC 3303 ms 54700 KB
01_12_11 AC 3276 ms 54700 KB
01_13_28 AC 3321 ms 54652 KB
01_14_41 AC 3380 ms 54620 KB
01_15_26 AC 3288 ms 54700 KB
01_16_49 AC 3300 ms 54708 KB
01_17_34 AC 3315 ms 54700 KB
01_18_02 AC 3247 ms 54648 KB
01_19_33 AC 3308 ms 54700 KB
01_20_29 AC 3300 ms 54632 KB
02_00_51254 AC 3557 ms 55380 KB
02_01_82431 AC 3653 ms 54684 KB
02_02_17056 AC 3493 ms 54888 KB
02_03_34866 AC 3550 ms 55256 KB
02_04_6779 AC 3484 ms 54700 KB
02_05_65534 AC 3599 ms 54860 KB
02_06_65535 AC 3630 ms 54844 KB
02_07_65536 AC 3610 ms 54868 KB
02_08_65537 AC 3651 ms 54864 KB
02_09_65538 AC 3602 ms 54880 KB
02_10_100000 AC 3704 ms 56244 KB