// compile: make data
// run: ./data < data.in
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#ifdef LOCAL
#include <debug/codeforces.h>
#define debug(x...) _debug_print(#x, x);
#define Debug(x...) _debug_print_format(#x, x);
std::ifstream terminal("/dev/tty");
#define PP cerr<<"\033[1;30mpause...\e[0m",terminal.ignore();
#else
#define debug(x...)
#define Debug(x...)
#define PP
#endif
template<typename...Args> void print_(Args...args){((cout<<args<<" "),...)<<endl;}
#define rep(i,a,b) for(int i=(a);i<(int)(b);++i)
#define sz(v) ((int)(v).size())
#define print(...) print_(__VA_ARGS__);
#define FIND(a, x) ((find(a.begin(),a.end(),(x))!=a.end())?1:0)
#define cmin(x,...) x=min({(x),__VA_ARGS__})
#define cmax(x,...) x=max({(x),__VA_ARGS__})
#define INTMAX (int)(9223372036854775807)
#define INF (int)(1152921504606846976)
#define NaN (int)(0x8b88e1d0595d51d1)
#define double long double
#define int long long
#define uint unsigned long long
#define MAXN 200010
namespace math {
template <typename T> vector<T> fft(vector<T> const& a, vector<T> const& b) {
function<void(vector<complex<double>>&)> bitrev = [](vector<complex<double>> &f) {
int n = f.size();
int i = 0;
for (int j = 1; j < n-1; ++j) {
for (int k = n>>1; k > (i ^= k); k >>= 1);
if (j < i) swap(f[i], f[j]);
}
};
function<void(vector<complex<double>>&, bool)> solve = [&bitrev](vector<complex<double>> &f, bool inv) -> void {
int n = f.size();
bitrev(f);
for (int len = 2; len <= n; len <<= 1) {
double ang = 2 * M_PI / len * (inv ? -1 : 1);
complex<double> wlen(cos(ang), sin(ang));
for (int i = 0; i < n; i += len) {
complex<double> w(1);
for (int j = 0; j < len / 2; j++) {
complex<double> u = f[i+j], v = f[i+j+len/2] * w;
f[i+j] = u + v;
f[i+j+len/2] = u - v;
w *= wlen;
}
}
}
if (inv) for (complex<double> &x: f) x /= n;
};
vector<complex<double>> fa(a.begin(), a.end()), fb(b.begin(), b.end());
int n = 1;
while (n < (int)(a.size() + b.size())) n <<= 1;
fa.resize(n), fb.resize(n);
solve(fa, 0), solve(fb, 0);
for (int i = 0; i < n; i++) fa[i] *= fb[i];
solve(fa, 1);
vector<int> res(n);
for (int i = 0; i < n; i++) res[i] = round(fa[i].real());
return res;
}
}
int32_t main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
int k, n, m; cin >> k >> n >> m;
vector<int> a(k+1), b(k+1);
rep(i, 0, n) {
int x; cin >> x;
++a[x];
}
rep(i, 0, m) {
int x; cin >> x;
++b[x];
}
auto res = math::fft(a, b);
rep(i, 2, 2*k+1) cout << res[i] << " \n"[i==2*k];
return 0;
}
Heard good things about 6zbetbr, especially for its mobile platform. Easy to use and lots of options. Give it a shot at 6zbetbr.
Thomo fans, gà chọi c1 thomo seems to be the spot. Just passing it along, alright?
Gonna check out king88winvip. Hope its gonna live up to its name and be a king among online spots. Visit it now: king88winvip
Heard about slotphp, decided to give it a whirl. The interface is smooth and easy to use. Definitely check it slotphp out if you’re into slots.
QQ822 is my go-to for quick scores. Easy to navigate and always something new to try. Get on it now qq822.
20betapp simplifies everything. Betting on the move has never been easier. Top app for all your needs. Download Now 20betapp.