Submission #1592791
Source Code Expand
import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Scanner; public class Main { public static void main(String[] args) throws FileNotFoundException { new Main().run(); } final long MODULO = 924844033L; void run() { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); ArrayList<Integer>[] g = new ArrayList[2 * n]; for (int i = 0; i < 2 * n; ++i) g[i] = new ArrayList<>(); for (int i = 0; i < n; ++i) { for (int di = -k; di <= k; di += 2 * k) { int nj = i + di; if (!(0 <= nj && nj < n)) { continue; } g[i].add(nj + n); g[nj + n].add(i); } } for (int i = 0; i < n; ++i) { if (vis[i]) continue; ++cnt[dfs(i, -1, g)]; } long[][][] dp2 = new long[1 + cnt.length][1 + cnt.length][2]; // #get,sz,bool dp2[1][1][1] = 1; dp2[0][1][0] = 1; for (int sz = 2; sz < cnt.length; ++sz) { for (int get = 0; get <= sz; ++get) { if (get + 1 <= sz) { dp2[get + 1][sz][1] += dp2[get][sz - 1][0]; if (dp2[get + 1][sz][1] >= MODULO) dp2[get + 1][sz][1] -= MODULO; } dp2[get][sz][0] += dp2[get][sz - 1][0] + dp2[get][sz - 1][1]; if (dp2[get][sz][0] >= MODULO) dp2[get][sz][0] -= MODULO; } } long[] dp = new long[n + 1]; dp[0] = 1; for (int sz = 1; sz < cnt.length; ++sz) { if (cnt[sz] == 0) continue; for (int t = 0; t < cnt[sz]; ++t) { long[] ndp = Arrays.copyOf(dp, dp.length); for (int get = 1; get <= sz; ++get) { for (int cur = n - get; cur >= 0; --cur) { ndp[cur + get] += (dp2[get][sz][0] + dp2[get][sz][1]) % MODULO * dp[cur] % MODULO; ndp[cur + get] %= MODULO; } } dp = Arrays.copyOf(ndp, dp.length); } } long[] fac = new long[n + 1]; fac[0] = 1; for (int i = 1; i < fac.length; ++i) { fac[i] = fac[i - 1] * i % MODULO; } long res = 0; for (int i = 1; i < dp.length; ++i) { res += fac[n - i] * dp[i] * (int) (Math.pow(-1, (i + 1) % 2)) % MODULO; res %= MODULO; } long ans = (fac[n] - res + MODULO) % MODULO; System.out.println(ans); } long[] cnt = new long[2000]; boolean[] vis = new boolean[4001]; int dfs(int cur, int par, ArrayList<Integer>[] g) { vis[cur] = true; int ret = 0; for (int dst : g[cur]) { if (dst == par) continue; if (vis[dst]) throw new AssertionError(); ret += dfs(dst, cur, g) + 1; } return ret; } static void tr(Object... objects) { System.out.println(Arrays.deepToString(objects)); } }
Submission Info
Submission Time | |
---|---|
Task | D - ~K Perm Counting |
User | fortoobye |
Language | Java8 (OpenJDK 1.8.0) |
Score | 900 |
Code Size | 2669 Byte |
Status | AC |
Exec Time | 1379 ms |
Memory | 228180 KB |
Compile Error
Note: ./Main.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 900 / 900 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | example0, example1, example2, example3, example4 |
All | example0, example1, example2, example3, example4, handmade0, handmade1, handmade2, handmade3, handmade4, handmade5, handmade6, maxrand0, maxrand1, maxrand2, maxrand3, maxrand4, rand0, rand1, rand2, rand3, rand4, small0, small1, small2, supersmall0, supersmall1, supersmall2 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
example0 | AC | 1237 ms | 210004 KB |
example1 | AC | 1229 ms | 210260 KB |
example2 | AC | 1223 ms | 209352 KB |
example3 | AC | 1253 ms | 208932 KB |
example4 | AC | 1278 ms | 208824 KB |
handmade0 | AC | 1226 ms | 209092 KB |
handmade1 | AC | 1341 ms | 211660 KB |
handmade2 | AC | 1257 ms | 211000 KB |
handmade3 | AC | 1379 ms | 207064 KB |
handmade4 | AC | 1253 ms | 210988 KB |
handmade5 | AC | 1324 ms | 209108 KB |
handmade6 | AC | 1332 ms | 209828 KB |
maxrand0 | AC | 1283 ms | 209752 KB |
maxrand1 | AC | 1355 ms | 228064 KB |
maxrand2 | AC | 1337 ms | 228180 KB |
maxrand3 | AC | 1335 ms | 209656 KB |
maxrand4 | AC | 1264 ms | 209520 KB |
rand0 | AC | 1320 ms | 216432 KB |
rand1 | AC | 1247 ms | 210248 KB |
rand2 | AC | 1265 ms | 208968 KB |
rand3 | AC | 1226 ms | 208968 KB |
rand4 | AC | 1295 ms | 207400 KB |
small0 | AC | 1266 ms | 210940 KB |
small1 | AC | 1228 ms | 210120 KB |
small2 | AC | 1245 ms | 210500 KB |
supersmall0 | AC | 1234 ms | 207672 KB |
supersmall1 | AC | 1253 ms | 209480 KB |
supersmall2 | AC | 1253 ms | 208076 KB |