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
AC × 4
AC × 22
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