Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
using namespace std; const int N = 1e6 + 7, mod = 998244353; long long binexp(long long a, long long n) { long long res = 1; while(n) { if(n & 1) { res = (res * a) % mod; } n >>= 1; a = (a * a) % mod; } return res; } namespace ntt { long long w[N], k, nrev; inline void init(int n, int root) { w[0] = 1; k = binexp(root, (mod - 1) / n); nrev = binexp(n, mod - 2); for(int i = 1; i <= n; i++) { w[i] = (w[i - 1] * k) % mod; } } inline void ntt(vector
&a, int n, bool inv = false) { a.resize(n); for(int i = 0, j = 0; i < n; i++) { if(i > j) swap(a[i], a[j]); for(int l = n / 2; (j ^= l) < l; l >>= 1); } for(int i = 2; i <= n; i <<= 1) { for(int j = 0; j < n; j += i) { for(int l = 0; l < i / 2; l++) { int x = j + l, y = j + l + (i / 2), z = (n / i) * l; long long tmp = (a[y] * w[(inv ? (n - z) : z)]) % mod; a[y] = (a[x] - tmp + mod) % mod; a[x] = (a[j + l] + tmp) % mod; } } } if(inv) { for(int i = 0; i < n; i++) { a[i] = (a[i] * nrev) % mod; } } } void multiply(vector
&a, vector
b, int root = 3) { int n = (int)a.size() + (int)b.size() - 1; while(n & (n - 1)) n++; a.resize(n); b.resize(n); init(n, root); ntt(a, n); ntt(b, n); for(int i = 0; i < n; i++) { a[i] = (a[i] * b[i]) % mod; } ntt(b, n, true); ntt(a, n, true); while(a.back() == 0) a.pop_back(); } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m, s; cin >> n >> m >> s; // auto start = chrono::high_resolution_clock::now(); vector
v(m + 1, 1), ans(1, 1); while(n) { if(n & 1) { ntt::multiply(ans, v); if(ans.size() > s + 1) ans.resize(s + 1); } ntt::multiply(v, v); if(v.size() > s + 1) v.resize(s + 1); n >>= 1; } ans.resize(s + 1); cout << ans[s] << "\n"; // auto stop = chrono::high_resolution_clock::now(); // cerr << chrono::duration_cast
(stop - start).count() << "\n"; return 0; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)