Submission #11424744


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, 825753601, 64
    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 PyPy3 (2.4.0)
Score 0
Code Size 1335 Byte
Status WA
Exec Time 1812 ms
Memory 135848 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
AC × 1
AC × 24
WA × 9
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 1352 ms 132028 KB
01_00_01 AC 1359 ms 132028 KB
01_01_19 AC 1339 ms 132028 KB
01_02_31 AC 1363 ms 132028 KB
01_03_22 AC 1401 ms 132028 KB
01_04_31 AC 1361 ms 132028 KB
01_05_40 AC 1360 ms 132028 KB
01_06_15 AC 1355 ms 132028 KB
01_07_39 AC 1364 ms 132028 KB
01_08_28 AC 1342 ms 132156 KB
01_09_30 AC 1358 ms 132156 KB
01_10_23 AC 1361 ms 132028 KB
01_11_33 AC 1371 ms 132028 KB
01_12_11 AC 1352 ms 132028 KB
01_13_28 AC 1367 ms 132028 KB
01_14_41 AC 1345 ms 132028 KB
01_15_26 AC 1341 ms 132028 KB
01_16_49 AC 1365 ms 132120 KB
01_17_34 AC 1353 ms 132028 KB
01_18_02 AC 1339 ms 132028 KB
01_19_33 AC 1338 ms 132028 KB
01_20_29 AC 1349 ms 132156 KB
02_00_51254 WA 1630 ms 134456 KB
02_01_82431 WA 1751 ms 135720 KB
02_02_17056 AC 1523 ms 134056 KB
02_03_34866 WA 1640 ms 133544 KB
02_04_6779 AC 1505 ms 133928 KB
02_05_65534 WA 1700 ms 134696 KB
02_06_65535 WA 1682 ms 134696 KB
02_07_65536 WA 1702 ms 134696 KB
02_08_65537 WA 1696 ms 134696 KB
02_09_65538 WA 1694 ms 134696 KB
02_10_100000 WA 1812 ms 135848 KB