QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#229846#7644. Good Splitsucup-team055#AC ✓108ms4008kbC++202.7kb2023-10-28 17:01:572023-10-28 17:01:58

Judging History

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

  • [2023-10-28 17:01:58]
  • 评测
  • 测评结果:AC
  • 用时:108ms
  • 内存:4008kb
  • [2023-10-28 17:01:57]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define all(a) a.begin(), a.end()
ll ceildiv(ll a, ll b) { return a / b + (a % b && (a ^ b) >= 0); }

struct mint {
  inline static int m = 0;
  int x;
  mint() : x(0) {}
  mint(ll x_) : x(x_% m) {
    if (x < 0)
      x += m;
  }
  mint& operator+=(mint b) {
    if ((x += b.x) >= m)
      x -= m;
    return *this;
  }
  mint& operator-=(mint b) {
    if ((x -= b.x) < 0)
      x += m;
    return *this;
  }
  mint& operator*=(mint b) {
    x = (ll)(x)*b.x % m;
    return *this;
  }
  mint pow(ll e) const {
    mint r = 1, b = *this;
    while (e) {
      if (e & 1)
        r *= b;
      b *= b;
      e /= 2;
    }
    return r;
  }
  mint inv() const { return pow(m - 2); }
  mint& operator/=(mint b) { return *this *= b.inv(); }
  friend mint operator+(mint a, mint b) { return a += b; }
  friend mint operator-(mint a, mint b) { return a -= b; }
  friend mint operator*(mint a, mint b) { return a *= b; }
  friend mint operator/(mint a, mint b) { return a /= b; }
};

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int N, p;
  cin >> N >> p;
  mint::m = p;

  const int lim = 2 * N + 1;
  vector<mint> fact(lim, 1), ifact(lim);
  rep(i, 1, lim) fact[i] = fact[i - 1] * i;
  ifact.back() = 1 / fact.back();
  for (int i = lim - 1; i >= 1; i--)
    ifact[i - 1] = ifact[i] * i;
  const auto binom2 = [&](int a, int b) {
    return fact[a + b] * ifact[a] * ifact[b];
  };
  const auto paren = [&](int n) -> mint {
    if (n == 0)
      return 1;
    else
      return binom2(n, n) - binom2(n + 1, n - 1);
  };

  using poly = vector<mint>;
  vector<poly> acol(2 * N + 1, poly(N + 1, 0));
  acol[0][0] = 1;
  rep(i, 0, N + 1) {
    rep(j, 0, i + 1) {
      acol[1][i] += paren(j) * paren(i - j) * binom2(2 * (i - j), 2 * j);
    }
  }
  rep(l, 2, 2 * N + 1) {
    rep(i, 0, N + 1) {
      rep(j, 0, i + 1) { acol[l][i] += acol[l - 1][j] * acol[1][i - j]; }
    }
  }

  vector<mint> ccol(N + 1, 0);
  rep(l, 1, N + 1) {
    mint temp = acol[1][l];
    rep(k, 1, l) temp -= ccol[k] * acol[2 * k][l - k];
    ccol[l] = temp / acol[2 * l][0];
  }

  vector<mint> cbip(N + 1, 0);
  rep(i, 0, N + 1) cbip[i] = ccol[i] / 2;

  vector<poly> abip(2 * N + 1, poly(N + 1, 0));
  rep(i, 0, 2 * N + 1) abip[i][0] = 1;
  rep(l, 1, N + 1) {
    rep(k, 1, l + 1) abip[1][l] += cbip[k] * abip[2 * k][l - k];
    rep(k, 2, 2 * N + 1) {
      rep(i, 0, l + 1) { abip[k][l] += abip[k - 1][i] * abip[1][l - i]; }
    }
  }

  rep(i, 1, N + 1) cout << abip[1][i].x << "\n";

  return 0;
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3512kb

input:

5 998244353

output:

1
3
14
84
592

result:

ok 5 number(s): "1 3 14 84 592"

Test #2:

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

input:

20 998244353

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
337584612
503820623
71483496
12733593
474907036
203223726
565209211
487441118
992424798
625482036

result:

ok 20 numbers

Test #3:

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

input:

30 147084737

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
43415138
115604731
88255570
6762644
25928144
117374310
119291296
29414136
87790057
136053957
103827626
145662835
60977924
8837626
61475022
108138661
88536961
105609125
140429327
77714436

result:

ok 30 numbers

Test #4:

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

input:

50 259851877

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
77732735
120479281
107558023
219154876
82657644
224090144
253190966
148874121
53920249
82785846
244357960
88406017
106161945
35184035
131007270
222579610
212725099
114435754
64242919
39323449
211238313
156440547
84150382
242052946
50634162
120017303
2...

result:

ok 50 numbers

Test #5:

score: 0
Accepted
time: 15ms
memory: 3928kb

input:

100 175127923

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
162456689
171123145
54532804
71333538
68283136
25628469
138841774
142350839
27676343
15931022
158187457
43201304
18465009
37939972
169592319
94983552
152752931
69017296
46403905
173424585
170947507
7870926
90491276
10182721
58907963
136216980
28163587...

result:

ok 100 numbers

Test #6:

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

input:

150 367542041

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
337584612
190675313
252320457
264200037
124276323
161424010
184935571
230223063
343780965
314302578
342350468
265272499
173792750
339843799
301192856
263531782
208259173
113525686
44197147
288967350
139023077
142942582
324678736
318907769
315638511
40...

result:

ok 150 numbers

Test #7:

score: 0
Accepted
time: 78ms
memory: 4008kb

input:

177 861641813

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
337584612
51986430
817568411
233712834
530886113
262319436
602763301
391560421
714952237
234059952
504165773
214901044
343336951
654631331
578657419
506328910
26764748
407306588
36662800
819329882
372916107
103054885
512356475
207029843
192047130
1038...

result:

ok 177 numbers

Test #8:

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

input:

1 998244353

output:

1

result:

ok 1 number(s): "1"

Test #9:

score: 0
Accepted
time: 103ms
memory: 3996kb

input:

200 864048671

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
337584612
42358998
716480375
849841780
472934607
500922480
184767796
279937457
399183954
512063087
91797677
107549673
485929841
293677006
593203756
235501697
372544850
500179291
849823101
602694217
345293985
459931747
386664093
196167251
265892579
252...

result:

ok 200 numbers

Test #10:

score: 0
Accepted
time: 106ms
memory: 3992kb

input:

199 958494587

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
337584612
623069921
583730251
536976835
256616783
340763703
344818742
765288755
200573977
666742925
957661404
606909377
32714935
246057767
23198149
389527637
588746573
223336510
430768410
501175382
380964997
647932740
845833201
113681916
396614824
546...

result:

ok 199 numbers

Test #11:

score: 0
Accepted
time: 108ms
memory: 3988kb

input:

198 165619889

output:

1
3
14
84
592
4659
39699
359004
3399164
33378417
6344834
20536013
73289310
162017284
159458288
100856961
164827673
70631917
154742952
14393421
27830529
37917167
68934527
54693629
76175385
34254720
114820104
69340313
35844068
25551171
137354127
120937326
10672731
81957539
132401938
29387190
74534300
...

result:

ok 198 numbers

Extra Test:

score: 0
Extra Test Passed