This is the snippet I have for FFT. But I feel it is slow in many cases.

One example is http://codeforces.com/problemset/submission/958/41610928 which takes nearly 3.85 seconds to pass for n=200000

Can somebody help me to optimise it.

Thanks.

# | User | Rating |
---|---|---|

1 | tourist | 3509 |

2 | OO0OOO00O0OOO0O0…O | 3327 |

3 | Um_nik | 3297 |

4 | Syloviaely | 3274 |

5 | LHiC | 3216 |

6 | Petr | 3161 |

7 | Benq | 3130 |

8 | ko_osaga | 3124 |

9 | Swistakk | 3089 |

10 | dotorya | 3060 |

# | User | Contrib. |
---|---|---|

1 | Radewoosh | 185 |

2 | rng_58 | 161 |

3 | tourist | 158 |

4 | Petr | 152 |

5 | Swistakk | 150 |

5 | Vovuh | 150 |

7 | csacademy | 147 |

8 | PikMike | 146 |

9 | Errichto | 145 |

9 | Um_nik | 145 |

This is the snippet I have for FFT. But I feel it is slow in many cases.

One example is http://codeforces.com/problemset/submission/958/41610928 which takes nearly 3.85 seconds to pass for n=200000

Can somebody help me to optimise it.

Thanks.

↑

↓

Codeforces (c) Copyright 2010-2018 Mike Mirzayanov

The only programming contests Web 2.0 platform

Server time: Sep/20/2018 20:33:45 (d1).

Desktop version, switch to mobile version.

User lists

Name |
---|

Since module is small (equal to 1009) in this task you don't need to use

`sqrt(MOD)`

hack and can manually multiply two polynoms (but don't forget to take resulting product modulo 1009 after each multiplification).Yeah. In this case I did that to get AC. But how to improve it in general ??

In case of this problem, maybe I'm blind but I see you using

`fft_modulo`

instead of`mul`

which is definetely use`sqrt(MOD)`

-hack.Regarding optimizing in general case: I'm sure I've read many articles, but I can't find anything (maybe because they are on Russian). But standart trick are to precalc all roots (

`wlen`

and`w`

in your code) — it gives boost with multiple using of`mul`

. Precalcing`bit reverse`

(or calculating it in the linear time) can give a little speed up.Anyway, you can always look at realization of fft from top participants if you have enough time and patience.

Oh sorry. I misunderstodd your first comment.

And thanks for the pre-calculation parts.