Submission #11424977


Source Code Expand

class FFT():
    def __init__(self, n, p, w):
        # pは素数で, wは1のn乗根(mod p)
        # 例:(n,p,w)=(4,5,2),(8,17,2),(262144,786433,3)
        self.n = n
        self.p = p
        self.w = w
        self.rn = pow(n, p-2, p)
        self.rw = pow(w, p-2, p)

    def base(self, A, n, w):
        p = self.p
        for i in range(n-len(A)):
            A.append(0)
        if n == 1:
            return A
        F0 = self.base(A[0::2], n//2, pow(w, 2, p))
        F1 = self.base(A[1::2], n//2, pow(w, 2, p))
        x = 1
        F = []
        for i in range(n):
            f = (F0[i % (n//2)] + x * F1[i % (n//2)]) % p
            x = (x * w) % p
            F.append(f)
        return F

    def fft(self, A):
        return self.base(A, self.n, self.w)

    def ift(self, A):
        F = self.base(A, self.n, self.rw)
        return [(f * self.rn) % self.p for f in F]


if __name__ == '__main__':
    N = int(input())
    A, B = [0], [0]
    for i in range(1, N+1):
        a, b = map(int, input().split())
        A.append(a)
        B.append(b)
    n, p, w = 262144, 1541406721, 103
    fft = FFT(n, p, w)
    FA = fft.fft(A)
    FB = fft.fft(B)
    FC = [(FA[i]*FB[i]) % p for i in range(n)]
    C = fft.ift(FC)
    for k in range(1, 2*N+1):
        print(C[k])

Submission Info

Submission Time
Task C - 高速フーリエ変換
User fjhr
Language Python (3.4.3)
Score 0
Code Size 1337 Byte
Status TLE
Exec Time 5257 ms
Memory 29964 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
TLE × 1
TLE × 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 TLE 5257 ms 27684 KB
01_00_01 TLE 5257 ms 21404 KB
01_01_19 TLE 5257 ms 29784 KB
01_02_31 TLE 5257 ms 29776 KB
01_03_22 TLE 5257 ms 29816 KB
01_04_31 TLE 5257 ms 29708 KB
01_05_40 TLE 5257 ms 29716 KB
01_06_15 TLE 5257 ms 29716 KB
01_07_39 TLE 5257 ms 29792 KB
01_08_28 TLE 5257 ms 29760 KB
01_09_30 TLE 5257 ms 29964 KB
01_10_23 TLE 5257 ms 29708 KB
01_11_33 TLE 5257 ms 29804 KB
01_12_11 TLE 5257 ms 29780 KB
01_13_28 TLE 5257 ms 29736 KB
01_14_41 TLE 5257 ms 29768 KB
01_15_26 TLE 5257 ms 29768 KB
01_16_49 TLE 5257 ms 29780 KB
01_17_34 TLE 5257 ms 29936 KB
01_18_02 TLE 5257 ms 25592 KB
01_19_33 TLE 5257 ms 29776 KB
01_20_29 TLE 5257 ms 29812 KB
02_00_51254 TLE 5257 ms 27060 KB
02_01_82431 TLE 5257 ms 27376 KB
02_02_17056 TLE 5257 ms 26796 KB
02_03_34866 TLE 5257 ms 27524 KB
02_04_6779 TLE 5257 ms 29164 KB
02_05_65534 TLE 5257 ms 27068 KB
02_06_65535 TLE 5257 ms 27248 KB
02_07_65536 TLE 5257 ms 27200 KB
02_08_65537 TLE 5257 ms 27072 KB
02_09_65538 TLE 5257 ms 27728 KB
02_10_100000 TLE 5257 ms 28088 KB