QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#287664#7754. Rolling For DaysMax_s_xaMAC ✓157ms84800kbC++144.8kb2023-12-20 21:23:192023-12-20 21:23:22

Judging History

你现在查看的是最新测评结果

  • [2023-12-20 21:23:22]
  • 评测
  • 测评结果:AC
  • 用时:157ms
  • 内存:84800kb
  • [2023-12-20 21:23:19]
  • 提交

answer

#include <iostream>
#include <algorithm>

typedef long long ll;
typedef double lf;

// #define DEBUG 1
struct IO
{
    #define MAXSIZE (1 << 20)
    #define isdigit(x) (x >= '0' && x <= '9')
    char buf[MAXSIZE], *p1, *p2;
    char pbuf[MAXSIZE], *pp;
    #if DEBUG
    #else
    IO() : p1(buf), p2(buf), pp(pbuf) {}
    ~IO() {fwrite(pbuf, 1, pp - pbuf, stdout);}
    #endif
    #define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin), p1 == p2) ? ' ' : *p1++)
    #define blank(x) (x == ' ' || x == '\n' || x == '\r' || x == '\t')

    template <typename T>
    void Read(T &x)
    {
        #if DEBUG
        std::cin >> x;
        #else
        bool sign = 0; char ch = gc(); x = 0;
        for (; !isdigit(ch); ch = gc())
            if (ch == '-') sign = 1;
        for (; isdigit(ch); ch = gc()) x = x * 10 + (ch ^ 48);
        if (sign) x = -x;
        #endif
    }
    void Read(char *s)
    {
        #if DEBUG
        std::cin >> s;
        #else
        char ch = gc();
        for (; blank(ch); ch = gc());
        for (; !blank(ch); ch = gc()) *s++ = ch;
        *s = 0;
        #endif
    }
    void Read(char &c) {for (c = gc(); blank(c); c = gc());}

    void Push(const char &c)
    {
        #if DEBUG
        putchar(c);
        #else
        if (pp - pbuf == MAXSIZE) fwrite(pbuf, 1, MAXSIZE, stdout), pp = pbuf;
        *pp++ = c;
        #endif
    }
    template <typename T>
    void Write(T x)
    {
        if (x < 0) x = -x, Push('-');
        static T sta[35];
        int top = 0;
        do sta[top++] = x % 10, x /= 10; while (x);
        while (top) Push(sta[--top] ^ 48);
    }
    template <typename T>
    void Write(T x, char lst) {Write(x), Push(lst);}
} IO;
#define Read(x) IO.Read(x)
#define Write(x, y) IO.Write(x, y)
#define Put(x) IO.Push(x)

using namespace std;

const int MAXN = 1010, MAXM = (1 << 12) + 5, mod = 998244353;

int n, m, q, a[15], b[15];

int suma[MAXM], sumb[MAXM];
ll fac[MAXN], inv[MAXN], sinv[MAXN];
ll f[MAXN][MAXM], fs[MAXN][MAXM], g[MAXN][MAXM], gs[MAXN][MAXM];
inline ll C(int n, int m) {return (m < 0 ? 1 : fac[n] * inv[n - m] % mod * inv[m] % mod);}

int main()
{
    // freopen("I.in", "r", stdin);
    // freopen("I.out", "w", stdout);
    #if DEBUG
    #else
    ios::sync_with_stdio(0), cin.tie(0);
    #endif
    fac[0] = fac[1] = inv[0] = inv[1] = 1;
    for (int i = 2; i < MAXN; i++) fac[i] = fac[i - 1] * i % mod, inv[i] = (mod - mod / i) * inv[mod % i] % mod;
    sinv[1] = 1;
    for (int i = 2; i < MAXN; i++) sinv[i] = (sinv[i - 1] + inv[i]) % mod, inv[i] = inv[i - 1] * inv[i] % mod;
    Read(n), Read(m);
    for (int i = 1; i <= m; i++) Read(a[i]);
    for (int i = 1; i <= m; i++) Read(b[i]);
    int nm = 0, wst = 0;
    for (int i = 1; i <= m; i++)
        if (b[i]) a[++nm] = a[i], b[nm] = b[i], q += b[nm], suma[1 << nm - 1] = a[nm], sumb[1 << nm - 1] = b[nm];
        else wst += a[i];
    m = nm;
    for (int s = 1; s < (1 << m); s++)
        suma[s] = suma[s ^ (s & -s)] + suma[s & -s], sumb[s] = sumb[s ^ (s & -s)] + sumb[s & -s];
        
    for (int i = 0; i <= q; i++) g[i][0] = inv[n - wst], gs[i][0] = sinv[n - wst] * inv[n - wst] % mod;
    // cout << q << " " << wst << "\n";
    // cout << 2 * inv[3] % mod * fac[2] % mod << "\n";
    for (int s = 1; s < (1 << m); s++)
    {
        for (int i = 1; i <= q; i++)
        {
            if (i < sumb[s]) continue;
            // cout << i << " " << s << " E\n";
            for (int x = 1; x <= m; x++)
                if (s & (1 << x - 1))
                {
                    int ss = s ^ (1 << x - 1);
                    ll G = (gs[i - 1][ss] - g[i - 1][ss] * sinv[n - i - suma[ss] + sumb[ss] - wst] % mod) * (suma[ss] - sumb[ss] + wst) % mod;
                    ll P = C(i - sumb[ss] - 1, b[x] - 1) % mod * fac[a[x]] % mod * inv[a[x] - b[x]] % mod * fac[n - i - suma[ss] + sumb[ss] - wst] % mod;
                    // cout << G << " " << P << "\n";
                    // cout << gs[i - 1][ss] << "\n";
                    // cout << n - i - suma[ss] + sumb[ss] - wst << " #\n";
                    f[i][s] = (f[i][s] + (fs[i - 1][ss] + G) * P) % mod;
                    g[i][s] = (g[i][s] + g[i - 1][ss] * P) % mod;
                }
            // cout << f[i][s] << " " << g[i][s] << "\n";
            fs[i][s] = (fs[i - 1][s] + f[i][s] * inv[n - i - suma[s] + sumb[s] - wst]) % mod;
            gs[i][s] = (gs[i - 1][s] + g[i][s] * sinv[n - i - suma[s] + sumb[s] - wst] % mod * inv[n - i - suma[s] + sumb[s] - wst]) % mod;
            g[i][s] = (g[i - 1][s] + g[i][s] * inv[n - i - suma[s] + sumb[s] - wst]) % mod;
            // cout << n - i - suma[s] + sumb[s] - wst << " #\n";
            // cout << i << " " << suma[s] << " " << sumb[s] << "\n";
        }
    }
    cout << (f[q][(1 << m) - 1] + mod + q) % mod << "\n";
    return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 7756kb

input:

2 2
1 1
1 1

output:

2

result:

ok answer is '2'

Test #2:

score: 0
Accepted
time: 1ms
memory: 7740kb

input:

4 2
2 2
2 1

output:

582309210

result:

ok answer is '582309210'

Test #3:

score: 0
Accepted
time: 1ms
memory: 7752kb

input:

5 5
1 1 1 1 1
0 0 0 0 1

output:

5

result:

ok answer is '5'

Test #4:

score: 0
Accepted
time: 0ms
memory: 7764kb

input:

4 4
1 1 1 1
1 1 1 0

output:

831870299

result:

ok answer is '831870299'

Test #5:

score: 0
Accepted
time: 0ms
memory: 7732kb

input:

5 2
4 1
2 1

output:

598946616

result:

ok answer is '598946616'

Test #6:

score: 0
Accepted
time: 1ms
memory: 7748kb

input:

5 2
3 2
3 1

output:

482484776

result:

ok answer is '482484776'

Test #7:

score: 0
Accepted
time: 1ms
memory: 7884kb

input:

5 5
1 1 1 1 1
0 1 1 1 0

output:

665496242

result:

ok answer is '665496242'

Test #8:

score: 0
Accepted
time: 1ms
memory: 7808kb

input:

3 3
1 1 1
1 1 0

output:

499122180

result:

ok answer is '499122180'

Test #9:

score: 0
Accepted
time: 1ms
memory: 9824kb

input:

5 5
1 1 1 1 1
1 0 1 1 1

output:

582309212

result:

ok answer is '582309212'

Test #10:

score: 0
Accepted
time: 1ms
memory: 9912kb

input:

3 2
2 1
2 0

output:

499122180

result:

ok answer is '499122180'

Test #11:

score: 0
Accepted
time: 1ms
memory: 9812kb

input:

20 5
1 6 7 2 4
0 1 3 1 4

output:

75028873

result:

ok answer is '75028873'

Test #12:

score: 0
Accepted
time: 1ms
memory: 7832kb

input:

15 5
4 2 3 4 2
2 1 1 2 1

output:

585494868

result:

ok answer is '585494868'

Test #13:

score: 0
Accepted
time: 1ms
memory: 7816kb

input:

20 4
5 4 3 8
1 2 2 3

output:

156108321

result:

ok answer is '156108321'

Test #14:

score: 0
Accepted
time: 0ms
memory: 9944kb

input:

15 2
6 9
2 8

output:

672033760

result:

ok answer is '672033760'

Test #15:

score: 0
Accepted
time: 1ms
memory: 7900kb

input:

20 12
1 2 1 1 2 4 1 3 2 1 1 1
1 0 0 1 0 0 1 0 2 0 1 1

output:

691640771

result:

ok answer is '691640771'

Test #16:

score: 0
Accepted
time: 0ms
memory: 7884kb

input:

19 12
1 1 1 2 1 2 2 1 2 4 1 1
1 1 0 1 1 0 1 1 0 2 1 0

output:

777326448

result:

ok answer is '777326448'

Test #17:

score: 0
Accepted
time: 0ms
memory: 9860kb

input:

20 2
19 1
1 1

output:

299473325

result:

ok answer is '299473325'

Test #18:

score: 0
Accepted
time: 1ms
memory: 9848kb

input:

19 2
14 5
10 1

output:

497380388

result:

ok answer is '497380388'

Test #19:

score: 0
Accepted
time: 1ms
memory: 10108kb

input:

100 5
10 25 6 19 40
0 2 4 5 11

output:

773338801

result:

ok answer is '773338801'

Test #20:

score: 0
Accepted
time: 1ms
memory: 9984kb

input:

64 5
1 12 13 33 5
1 0 1 20 0

output:

571823997

result:

ok answer is '571823997'

Test #21:

score: 0
Accepted
time: 1ms
memory: 7960kb

input:

100 4
15 38 24 23
0 20 0 1

output:

635309463

result:

ok answer is '635309463'

Test #22:

score: 0
Accepted
time: 2ms
memory: 16416kb

input:

88 5
15 25 9 19 20
8 15 9 18 17

output:

400310961

result:

ok answer is '400310961'

Test #23:

score: 0
Accepted
time: 2ms
memory: 12284kb

input:

100 12
2 2 13 9 13 7 2 1 6 15 17 13
0 0 5 7 10 7 0 1 0 0 4 4

output:

552732942

result:

ok answer is '552732942'

Test #24:

score: 0
Accepted
time: 0ms
memory: 10648kb

input:

59 12
7 6 3 5 4 6 5 2 5 6 5 5
4 5 2 5 3 6 0 2 1 0 3 3

output:

27023521

result:

ok answer is '27023521'

Test #25:

score: 0
Accepted
time: 1ms
memory: 10144kb

input:

100 3
10 60 30
0 28 21

output:

261595276

result:

ok answer is '261595276'

Test #26:

score: 0
Accepted
time: 1ms
memory: 8080kb

input:

84 2
39 45
4 23

output:

897695217

result:

ok answer is '897695217'

Test #27:

score: 0
Accepted
time: 0ms
memory: 65916kb

input:

1000 5
370 136 129 182 183
312 47 112 22 119

output:

705415872

result:

ok answer is '705415872'

Test #28:

score: 0
Accepted
time: 0ms
memory: 42568kb

input:

766 5
372 194 98 90 12
165 123 53 27 0

output:

870555094

result:

ok answer is '870555094'

Test #29:

score: 0
Accepted
time: 0ms
memory: 79984kb

input:

1000 2
374 626
175 591

output:

501708945

result:

ok answer is '501708945'

Test #30:

score: 0
Accepted
time: 0ms
memory: 32520kb

input:

701 1
701
413

output:

413

result:

ok answer is '413'

Test #31:

score: 0
Accepted
time: 157ms
memory: 84268kb

input:

1000 12
101 43 34 281 23 24 12 25 66 222 145 24
37 43 27 257 5 11 12 19 62 41 87 13

output:

265294941

result:

ok answer is '265294941'

Test #32:

score: 0
Accepted
time: 8ms
memory: 31840kb

input:

942 12
83 142 96 10 3 10 60 93 398 13 11 23
37 56 36 0 3 0 10 35 33 1 9 19

output:

956409637

result:

ok answer is '956409637'

Test #33:

score: 0
Accepted
time: 0ms
memory: 51252kb

input:

1000 4
473 65 438 24
79 61 327 24

output:

491224221

result:

ok answer is '491224221'

Test #34:

score: 0
Accepted
time: 0ms
memory: 40212kb

input:

870 4
320 17 182 351
145 0 181 4

output:

664946681

result:

ok answer is '664946681'

Test #35:

score: 0
Accepted
time: 48ms
memory: 59904kb

input:

1000 12
102 2 110 62 106 176 37 27 6 208 92 72
57 0 106 20 36 4 20 12 3 134 8 61

output:

3888811

result:

ok answer is '3888811'

Test #36:

score: 0
Accepted
time: 67ms
memory: 74364kb

input:

1000 12
1 44 209 187 27 71 127 139 134 22 20 19
0 19 153 113 27 29 82 74 37 19 20 9

output:

278584590

result:

ok answer is '278584590'

Test #37:

score: 0
Accepted
time: 96ms
memory: 56400kb

input:

1000 12
193 84 261 36 75 7 70 12 38 22 8 194
68 15 11 20 16 7 53 1 6 6 6 189

output:

704313398

result:

ok answer is '704313398'

Test #38:

score: 0
Accepted
time: 72ms
memory: 84800kb

input:

1000 12
171 135 21 74 115 3 4 122 32 70 224 29
71 120 20 66 61 2 1 102 28 0 201 3

output:

608268027

result:

ok answer is '608268027'

Test #39:

score: 0
Accepted
time: 142ms
memory: 79836kb

input:

1000 12
54 20 201 182 16 66 23 153 36 39 151 59
33 5 189 80 13 56 13 38 7 22 92 21

output:

795531860

result:

ok answer is '795531860'

Test #40:

score: 0
Accepted
time: 143ms
memory: 77480kb

input:

1000 12
218 16 12 152 67 64 65 3 90 263 44 6
107 2 2 143 11 28 53 2 55 106 39 5

output:

903827471

result:

ok answer is '903827471'

Extra Test:

score: 0
Extra Test Passed