import java.io.*;
import java.util.*;
public class Main {
static final int MOD = 1_000_000_007;
static final double PI = Math.PI;
// ================= Complex =================
static class Complex {
double re, im;
Complex(double r, double i) { re = r; im = i; }
Complex add(Complex o) { return new Complex(re + o.re, im + o.im); }
Complex sub(Complex o) { return new Complex(re - o.re, im - o.im); }
Complex mul(Complex o) {
return new Complex(re * o.re - im * o.im, re * o.im + im * o.re);
}
Complex conj() { return new Complex(re, -im); }
void div(double d) { re /= d; im /= d; }
}
// ================= FFT =================
static void fft(Complex[] a, boolean invert) {
int n = a.length;
for (int i = 1, j = 0; i < n; i++) {
int bit = n >> 1;
for (; j >= bit; bit >>= 1) j -= bit;
j += bit;
if (i < j) {
Complex t = a[i];
a[i] = a[j];
a[j] = t;
}
}
for (int len = 2; len
Подробнее здесь: [url]https://stackoverflow.com/questions/79885206/java-fft-implementation-fails-with-runtime-error-on-competitive-programming-judg[/url]
[b]“Java FFT со сложными объектами, вызывающими ошибку времени выполнения (NZEC/MLE)”[/b] [code]import java.io.*; import java.util.*;
public class Main {
static final int MOD = 1_000_000_007; static final double PI = Math.PI;
// ================= Complex ================= static class Complex { double re, im; Complex(double r, double i) { re = r; im = i; } Complex add(Complex o) { return new Complex(re + o.re, im + o.im); } Complex sub(Complex o) { return new Complex(re - o.re, im - o.im); } Complex mul(Complex o) { return new Complex(re * o.re - im * o.im, re * o.im + im * o.re); } Complex conj() { return new Complex(re, -im); } void div(double d) { re /= d; im /= d; } }
// ================= FFT ================= static void fft(Complex[] a, boolean invert) { int n = a.length; for (int i = 1, j = 0; i < n; i++) { int bit = n >> 1; for (; j >= bit; bit >>= 1) j -= bit; j += bit; if (i < j) { Complex t = a[i]; a[i] = a[j]; a[j] = t; } } for (int len = 2; len