Submission #42748337
Source Code Expand
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
const int MAXN = 500, MOD = 998244353;
int n, a[MAXN + 5], bino[MAXN + 5][MAXN + 5], fac[MAXN + 5], ifac[MAXN + 5];
int f[2][MAXN + 5][MAXN + 5];
inline int mul(const int u, const int v) { return 1ll * u * v % MOD; }
inline void subeq(int& u, const int v) { (u -= v) < 0 && (u += MOD); }
inline int sub(int u, const int v) { return (u -= v) < 0 ? u + MOD : u; }
inline void addeq(int& u, const int v) { (u += v) >= MOD && (u -= MOD); }
inline int add(int u, const int v) { return (u += v) < MOD ? u : u - MOD; }
inline int mpow(int u, int v) {
int ret = 1;
for (; v; u = mul(u, u), v >>= 1) ret = mul(ret, v & 1 ? u : 1);
return ret;
}
inline void init() {
fac[0] = 1;
rep (i, 1, n) fac[i] = mul(i, fac[i - 1]);
ifac[n] = mpow(fac[n], MOD - 2);
per (i, n - 1, 0) ifac[i] = mul(i + 1, ifac[i + 1]);
rep (i, 0, n) {
bino[i][0] = 1;
rep (j, 1, i) bino[i][j] = add(bino[i - 1][j - 1], bino[i - 1][j]);
}
}
int main() {
scanf("%d", &n), init();
rep (i, 1, n) scanf("%d", &a[i]);
std::sort(a + 1, a + n + 1, std::greater<int>());
int cnt = 0;
f[~n & 1][0][0] = 1;
per (i, n, 1) {
auto fcur = f[i & 1], flas = f[~i & 1];
while (cnt < n && a[cnt + 1] >= i) ++cnt;
rep (j, 0, cnt) { // value chosen
rep (k, 0, cnt) if (int& cur = flas[j][k]) { // place chosen
int dj = 0, dk = 0, inv = 1;
do {
addeq(fcur[j + dj][k + dk], mul(mul(cur,
mul(bino[cnt - j][dj], bino[cnt - k][dk])),
mul(fac[dk], inv)));
++dj, dk += i, inv = mul(inv, ifac[i]);
} while (j + dj <= cnt && k + dk <= cnt);
cur = 0;
}
}
}
int ans = 0;
rep (i, 1, n) addeq(ans, f[1][i][n]);
printf("%d\n", ans);
return 0;
}
Submission Info
| Submission Time |
|
| Task |
E - Strange Constraints |
| User |
Rainybunny |
| Language |
C++ (GCC 9.2.1) |
| Score |
700 |
| Code Size |
2114 Byte |
| Status |
AC |
| Exec Time |
239 ms |
| Memory |
6228 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:35:10: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
35 | scanf("%d", &n), init();
| ~~~~~^~~~~~~~~~
./Main.cpp:36:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
36 | rep (i, 1, n) scanf("%d", &a[i]);
| ~~~~~^~~~~~~~~~~~~
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
700 / 700 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt |
| All |
00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_01.txt |
AC |
7 ms |
3700 KiB |
| 00_sample_02.txt |
AC |
2 ms |
3604 KiB |
| 00_sample_03.txt |
AC |
3 ms |
3772 KiB |
| 00_sample_04.txt |
AC |
4 ms |
3684 KiB |
| 01_test_01.txt |
AC |
2 ms |
3580 KiB |
| 01_test_02.txt |
AC |
2 ms |
3688 KiB |
| 01_test_03.txt |
AC |
2 ms |
3588 KiB |
| 01_test_04.txt |
AC |
168 ms |
6100 KiB |
| 01_test_05.txt |
AC |
133 ms |
5744 KiB |
| 01_test_06.txt |
AC |
160 ms |
5960 KiB |
| 01_test_07.txt |
AC |
178 ms |
6048 KiB |
| 01_test_08.txt |
AC |
176 ms |
6144 KiB |
| 01_test_09.txt |
AC |
177 ms |
6224 KiB |
| 01_test_10.txt |
AC |
8 ms |
5652 KiB |
| 01_test_11.txt |
AC |
239 ms |
6228 KiB |
| 01_test_12.txt |
AC |
9 ms |
6092 KiB |
| 01_test_13.txt |
AC |
230 ms |
6104 KiB |
| 01_test_14.txt |
AC |
129 ms |
5984 KiB |
| 01_test_15.txt |
AC |
177 ms |
6088 KiB |
| 01_test_16.txt |
AC |
177 ms |
6220 KiB |
| 01_test_17.txt |
AC |
180 ms |
5988 KiB |
| 01_test_18.txt |
AC |
181 ms |
6052 KiB |