Submission #3231601


Source Code Expand

import cmath
pi = cmath.pi
exp = cmath.exp

def make_exp_t(N, base):
    exp_t = {0: 1}
    temp = N
    while temp:
        exp_t[temp] = exp(base / temp)
        temp >>= 1
    return exp_t

def fft_dfs(f, s, N, st, exp_t):
    if N==2:
        a = f[s]; b = f[s+st]
        return [a+b, a-b]
    N2 = N//2; st2 = st*2
    F0 = fft_dfs(f, s   , N2, st2, exp_t)
    F1 = fft_dfs(f, s+st, N2, st2, exp_t)
    w = exp_t[N]; wk = 1.0
    for k in range(N2):
        U = F0[k]; V = wk * F1[k]
        F0[k] = U + V
        F1[k] = U - V
        wk *= w
    F0.extend(F1)
    return F0

def fft(f, N):
    if N==1:
        return f
    return fft_dfs(f, 0, N, 1, fft_exp_t)

def ifft(F, N):
    if N==1:
        return F
    f = fft_dfs(F, 0, N, 1, ifft_exp_t)
    for i in range(N):
        f[i] /= N
    return f

import sys
readline = sys.stdin.readline
write = sys.stdout.write

n = int(input())
f = []
g = []
for i in range(n):
    a, b = map(float, readline().split())
    f.append(a); g.append(b)


N = 2**(2*n-1).bit_length()
fft_exp_t = make_exp_t(N, -2j*pi)
ifft_exp_t = make_exp_t(N, 2j*pi)

f.extend([0]*(N-n))
g.extend([0]*(N-n))

F = fft(f, N)
G = fft(g, N)

FG = [F[k]*G[k] for k in range(N)]

fg = ifft(FG, N)

write("0\n")
for i in range(2*n-1):
    write("%d\n" % (fg[i].real+0.5))

Submission Info

Submission Time
Task C - 高速フーリエ変換
User yaketake08
Language Python (3.4.3)
Score 100
Code Size 1364 Byte
Status AC
Exec Time 2971 ms
Memory 58092 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 17 ms 3188 KB
01_00_01 AC 17 ms 3192 KB
01_01_19 AC 17 ms 3192 KB
01_02_31 AC 18 ms 3192 KB
01_03_22 AC 18 ms 3192 KB
01_04_31 AC 18 ms 3192 KB
01_05_40 AC 18 ms 3192 KB
01_06_15 AC 17 ms 3192 KB
01_07_39 AC 18 ms 3192 KB
01_08_28 AC 18 ms 3192 KB
01_09_30 AC 18 ms 3192 KB
01_10_23 AC 18 ms 3192 KB
01_11_33 AC 18 ms 3192 KB
01_12_11 AC 18 ms 3188 KB
01_13_28 AC 18 ms 3188 KB
01_14_41 AC 18 ms 3192 KB
01_15_26 AC 18 ms 3192 KB
01_16_49 AC 19 ms 3192 KB
01_17_34 AC 18 ms 3192 KB
01_18_02 AC 18 ms 3192 KB
01_19_33 AC 19 ms 3192 KB
01_20_29 AC 19 ms 3192 KB
02_00_51254 AC 1394 ms 30560 KB
02_01_82431 AC 2935 ms 56104 KB
02_02_17056 AC 655 ms 16360 KB
02_03_34866 AC 1352 ms 29900 KB
02_04_6779 AC 169 ms 6568 KB
02_05_65534 AC 1412 ms 31352 KB
02_06_65535 AC 1421 ms 31588 KB
02_07_65536 AC 1430 ms 31352 KB
02_08_65537 AC 2841 ms 55156 KB
02_09_65538 AC 2877 ms 55128 KB
02_10_100000 AC 2971 ms 58092 KB