Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 2005;
- const int md = 924844033;
- int n, k;
- int c[N];
- int f[N][N][2][2];
- void add(int &x, int y) { x += y; while(x >= md) x -= md; if (x < 0) x += md; }
- int main() {
- ios_base::sync_with_stdio(false); cin.tie(0);
- cin >> n >> k;
- for (int i = 0; i < k; ++i) c[i] = (n - 1) / k;
- for (int i = 0; i <= (n - 1) % k; ++i) ++c[i];
- int pos = 1;
- int cmd = 0;
- f[0][0][0][0] = 1;
- for (int i = 0; i < n; ++i) {
- for (int rem = 0; rem <= i; ++rem) for (int rem_i = 0; rem_i < 2; ++rem_i) for (int rem_pi = 0; rem_pi < 2; ++rem_pi) {
- if (!f[i][rem][rem_i][rem_pi]) continue;
- int r0 = rem_i, r1 = rem_pi;
- if (i + 1 == pos) r0 = 0, r1 = 0;
- add(f[i + 1][rem][0][1], 1ll * (rem - r1) * f[i][rem][rem_i][rem_pi] % md);
- add(f[i + 1][rem][1][0], 1ll * (rem - r0) * f[i][rem][rem_i][rem_pi] % md);
- add(f[i + 1][rem][0][0], f[i][rem][rem_i][rem_pi] % md);
- add(f[i + 1][rem + 1][1][1], f[i][rem][rem_i][rem_pi] % md);
- if (rem > 0) add(f[i + 1][rem - 1][0][0], 1ll * (rem - r0) * (rem - r1) * f[i][rem][rem_i][rem_pi] % md);
- }
- if (i + 1 == pos) {
- pos += c[cmd]; ++cmd;
- }
- }
- int ans = 0;
- for (int r0 = 0; r0 < 2; ++r0) for (int r1 = 0; r1 < 2; ++r1) {
- add(ans, f[n][0][r0][r1]);
- }
- cout << ans << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment