Submission #11424641


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, 786433, 3
    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 1331 Byte
Status WA
Exec Time 1792 ms
Memory 135208 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
AC × 1
AC × 22
WA × 11
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 1388 ms 132320 KB
01_00_01 AC 1375 ms 132156 KB
01_01_19 AC 1378 ms 132028 KB
01_02_31 AC 1382 ms 132028 KB
01_03_22 AC 1373 ms 132028 KB
01_04_31 AC 1374 ms 132156 KB
01_05_40 AC 1360 ms 132056 KB
01_06_15 AC 1359 ms 132028 KB
01_07_39 AC 1371 ms 132028 KB
01_08_28 AC 1374 ms 132028 KB
01_09_30 AC 1368 ms 132028 KB
01_10_23 AC 1359 ms 132040 KB
01_11_33 AC 1371 ms 132156 KB
01_12_11 AC 1369 ms 132156 KB
01_13_28 AC 1376 ms 132028 KB
01_14_41 AC 1382 ms 132028 KB
01_15_26 AC 1356 ms 132028 KB
01_16_49 AC 1372 ms 132148 KB
01_17_34 AC 1353 ms 132028 KB
01_18_02 AC 1346 ms 132028 KB
01_19_33 AC 1367 ms 132028 KB
01_20_29 AC 1367 ms 132028 KB
02_00_51254 WA 1640 ms 134196 KB
02_01_82431 WA 1768 ms 135208 KB
02_02_17056 WA 1507 ms 134056 KB
02_03_34866 WA 1614 ms 133416 KB
02_04_6779 WA 1534 ms 133928 KB
02_05_65534 WA 1700 ms 134184 KB
02_06_65535 WA 1677 ms 134312 KB
02_07_65536 WA 1681 ms 134312 KB
02_08_65537 WA 1682 ms 134184 KB
02_09_65538 WA 1692 ms 134184 KB
02_10_100000 WA 1792 ms 135208 KB