QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#512311#9174. Game Designucup-team4361#AC ✓14ms3844kbC++203.3kb2024-08-10 14:07:322024-08-10 14:07:33

Judging History

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

  • [2024-08-10 14:07:33]
  • 评测
  • 测评结果:AC
  • 用时:14ms
  • 内存:3844kb
  • [2024-08-10 14:07:32]
  • 提交

answer

#include <bits/stdc++.h>

using std::cin, std::cout;
using std::vector, std::array, std::string;
using std::views::iota, std::views::reverse, std::views::take;

template <class T> using Vec = vector<T>;
template <class T> using Opt = std::optional<T>;

using i64 = int64_t;
using u32 = uint32_t;
using u64 = uint64_t;

std::mt19937_64 mt(std::chrono::steady_clock::now().time_since_epoch().count());

template <class T> T pow(T a, i64 b) {
    assert(b >= 0);
    T r = 1;
    while (b) {
        if (b & 1) r *= a;
        a *= a;
        b >>= 1;
    }
    return r;
}

template <u32 mod> struct ModInt {
    using mint = ModInt;

    static constexpr u32 m = mod;  /// start-hash
    u32 v;
    constexpr ModInt() : v(0) {}
    template <class T> constexpr ModInt(T a) { s(u32(a % m + m)); }
    constexpr mint& s(u32 a) {
        v = a < m ? a : a - m;
        return *this;
    }
    friend mint inv(const mint& n) { return pow(n, m - 2); }  /// end-hash

    mint operator-() const {  /// start-hash
        mint res;
        res.v = v ? m - v : 0;
        return res;
    }  /// end-hash

    friend bool operator==(const mint& a, const mint& b) {
        return a.v == b.v;
    }  /// start-hash
    friend bool operator!=(const mint& a, const mint& b) {
        return !(a == b);
    }  /// end-hash

    mint& operator+=(const mint& o) { return s(v + o.v); }  /// start-hash
    mint& operator-=(const mint& o) { return s(v + m - o.v); }
    mint& operator*=(const mint& o) {
        v = u32(u64(v) * o.v % m);
        return *this;
    }
    mint& operator/=(const mint& o) { return *this *= inv(o); }  /// end-hash

    friend mint operator+(const mint& a, const mint& b) {
        return mint(a) += b;
    }  /// start-hash
    friend mint operator-(const mint& a, const mint& b) { return mint(a) -= b; }
    friend mint operator*(const mint& a, const mint& b) { return mint(a) *= b; }
    friend mint operator/(const mint& a, const mint& b) {
        return mint(a) /= b;
    }  /// end-hash

    static constexpr u32 get_mod() { return m; }
    static constexpr mint get_root() {
        if (m == 998244353) return 3;
        if (m == 1053818881) return 2789;
        assert(false);
    }
};

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

    using Z = ModInt<998244353>;
    constexpr int MAXN = 5234;
    auto fact = Vec<Z>(MAXN);
    fact[0] = 1;
    for (int i : iota(1, MAXN)) fact[i] = fact[i - 1] * i;

    int T;
    cin >> T;
    while (T--) {
        string S;
        cin >> S;
        std::reverse(begin(S), end(S));

        auto dp = Vec<Z>{1};
        for (char c : S) {
            auto ndp = Vec<Z>(size(dp));
            if (c == '1') {
                ndp.emplace_back();
                for (ssize_t j = 0; j < ssize(dp); j++) {
                    // Assign P[i] := i
                    ndp[j] -= dp[j];
                    // Otherwisse
                    ndp[j + 1] += dp[j];
                }
            } else if (c == '0') {
                for (ssize_t j = 0; j < ssize(dp); j++) {
                    ndp[j] += dp[j] * Z(j);
                }
            } else {
                assert(false);
            }

            dp = std::move(ndp);
        }

        Z tot = 0;
        for (ssize_t j = 0; j < ssize(dp); j++) {
            tot += dp[j] * fact[j];
        }
        cout << tot.v << '\n';
    }

    return 0;
}

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4
0101
1010010010001010
11111
10100100011000010010101001001001

output:

3
0
44
393298077

result:

ok 4 number(s): "3 0 44 393298077"

Test #2:

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

input:

4
01
11
10
00

output:

1
1
0
0

result:

ok 4 number(s): "1 1 0 0"

Test #3:

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

input:

8
011
110
100
000
010
101
111
001

output:

2
0
0
0
0
1
2
1

result:

ok 8 numbers

Test #4:

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

input:

16
0111
0110
0000
1001
1100
0011
0100
1110
1011
0001
1000
0010
1111
0101
1010
1101

output:

9
0
0
1
0
6
0
0
6
1
0
0
9
3
0
3

result:

ok 16 numbers

Test #5:

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

input:

32
01100
10010
11011
10100
00100
01010
10000
01111
11000
01001
00101
00011
11001
11111
10001
00000
00111
11101
11010
10110
10111
01101
10011
11100
01110
00001
01000
10101
01011
00010
00110
11110

output:

0
0
22
0
0
0
0
44
0
3
7
14
3
44
1
0
33
11
0
0
33
11
14
0
0
1
0
7
22
0
0
0

result:

ok 32 numbers

Test #6:

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

input:

64
001000
011100
101100
001101
011110
100000
000000
001111
000101
110111
010001
101111
001001
011111
111100
010011
100010
000001
010110
111111
111101
110101
111010
011010
110110
101000
101110
010010
011011
010000
100110
001010
101010
100111
100100
100101
110000
010111
011000
110011
000100
101001
111...

output:

0
0
0
39
0
0
0
212
15
159
3
212
7
265
0
50
0
1
0
265
53
25
0
0
0
0
0
0
106
0
0
0
0
117
0
15
0
159
0
50
0
7
0
0
25
53
3
117
30
11
39
78
0
0
30
0
0
1
0
11
78
106
0
0

result:

ok 64 numbers

Test #7:

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

input:

128
0111100
0110000
1010010
1001001
1010110
0011101
0100100
1100110
0110101
1001110
0101110
1111011
0100101
0111110
1001011
0110010
1111000
0101111
1101011
1001000
1110100
1000011
1001111
1101000
0100000
0010010
1100000
1011000
0100111
1001101
1010111
0111101
1110011
0101011
0001110
0010100
0011110
...

output:

0
0
0
15
0
245
0
0
117
0
0
618
53
0
262
0
0
1236
362
0
0
62
980
0
0
0
0
0
543
131
735
309
234
362
0
0
0
1545
0
11
7
1236
0
170
25
15
0
3
490
0
735
0
0
0
0
106
0
618
0
1854
85
393
0
0
106
0
7
31
0
62
39
0
31
0
53
0
0
927
0
0
927
39
0
0
170
0
543
980
393
0
0
25
0
0
0
262
11
0
1
0
0
0
3
0
131
309
0
53
...

result:

ok 128 numbers

Test #8:

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

input:

256
01101111
10001000
01111011
01100010
10101111
00100101
11111101
01010000
00111010
01101001
10001101
00101011
00100000
11000111
01001010
10111100
01000001
11001101
01110111
00101000
00100001
01101010
10101101
01101000
11111100
11000110
11001110
00011111
01010101
11101010
10110010
11111000
11011000...

output:

8476
0
4238
0
7028
177
2119
0
0
117
423
1626
0
1779
0
0
3
593
6357
0
7
0
813
0
0
0
0
8785
387
0
0
0
0
1097
0
0
0
0
0
0
0
0
0
0
0
0
3514
0
0
0
0
0
53
0
11
109
2194
126
0
423
5580
0
0
12714
0
2119
10595
2066
0
85
3099
0
0
0
0
0
0
8785
490
0
354
1186
554
1342
11
0
0
1269
39
387
0
0
0
0
25
671
0
0
2066
...

result:

ok 256 numbers

Test #9:

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

input:

512
011101111
100101011
001000111
000000011
111011100
111110010
000011111
001100011
001101100
110001101
100010001
000010000
010110100
111001110
010110010
000101010
000111100
000110011
001111010
000001100
010010001
100110010
101010000
110110101
010100101
000111000
000111001
011000111
011010011
000011...

output:

66748
7106
7827
254
0
0
48825
2194
0
1885
31
0
0
0
0
0
0
4650
0
0
53
0
0
2971
799
0
1097
9999
4366
0
671
28518
85554
11
0
23662
0
0
9094
0
0
0
0
569
5761
11831
4547
0
42777
0
0
59155
3759
0
15
7763
0
9094
5942
0
1033
0
813
9765
3770
1331
133496
3993
0
0
71295
0
53
0
31052
6123
5218
0
15526
0
0
0
999...

result:

ok 512 numbers

Test #10:

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

input:

500
1000111011
1110100001
0111111011
1110001101
0111100101
0110000101
0110100111
0001101011
1000001011
1001000111
1010011001
0110001001
1100011011
1110100101
1110000101
0001001111
1110111001
0011101010
1110001001
0110111111
0111101111
1011010001
1001010111
1001011101
1110110011
1101011111
1100110001...

output:

106426
117
296658
10489
9403
1013
90825
62978
8238
33639
2609
501
52542
4483
1013
169404
9403
0
501
889974
593316
529
127053
42351
39678
553585
593
188678
129523
221
2325
0
245
24543
39110
741645
221
0
11831
2026
22267
129523
388569
39
0
10790
1334961
12839
18341
7383
6975
24543
85
9481
3
459555
234...

result:

ok 500 numbers

Test #11:

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

input:

50
1100100010011000000010000010100000000000000000100000100000000000110100000000011010110010010000000001
0001000000010000000010000000000001000001000001011011100001001000101000000000100000000001000000100001
00100000000000000000000001010000000010010000001000100000011010000000110010000000100010000010001...

output:

205708860
923855108
919861840
547941024
630835913
963096460
557602835
220618001
647925838
0
0
47656261
460024445
0
838886692
191295282
499427902
294750324
654015592
0
593262022
707533601
157943159
928642837
696324035
245239519
808714077
711940617
747899832
118533868
878420264
806102755
395501450
355...

result:

ok 50 numbers

Test #12:

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

input:

50
0000011110010101000001001100000011001000010000111111000100000110101001011000101000100010000010110001
1011111000000100111011001010111000100010111110000000100110100100110111110100010011000101101111011100
10011010101100110101011101000100011110110011010100101111000111101100100101000011100010001100010...

output:

900268216
0
844603406
236796635
407522154
226699036
0
190239333
631618284
0
327246223
0
20559964
745508700
637737581
65478876
361504280
91157130
196682122
70737081
7244489
701018137
598065124
483954599
0
523352186
453684381
465782465
391157840
511431972
69450817
373878062
708107432
174222661
1967386...

result:

ok 50 numbers

Test #13:

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

input:

50
0011011110110110101100011111101001100110111110111011000011011110110011111100001010111111101111000111
1110010111111011111010011011100110001110101101110101110010111100110100101110111110110001111111010111
10101100000111000100001110111110011000111111000010111011111100010010101111001011010100111001110...

output:

497197651
976783133
352701285
514000197
136889040
191643872
784167119
275459708
939879193
701390938
470597025
442500414
768600751
672634738
645103426
430371225
0
466151127
0
472821930
945035312
0
498462764
369675272
722536547
0
794766856
682790685
578261000
838414952
106398218
99771164
681081103
949...

result:

ok 50 numbers

Test #14:

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

input:

50
1111101100111111111111011011001111100111101111110111111101101111111111110101111111111111111101110111
0110101100101100001111010111111111110110110010111111111111011110110011111111101111111111011111101101
11110111101110110111110110111110111110011110101111111111110101111110111011100010011100111111001...

output:

23606791
6373643
730292083
778994470
613158198
728025270
374269904
839367687
267381083
171300918
466325654
185771633
369673438
786338255
211219474
743203244
669692205
441307951
346011798
813717905
359257821
700939913
416208962
791306165
816414602
112231768
636885860
703147739
733175558
140559786
957...

result:

ok 50 numbers

Test #15:

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

input:

1
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

1

result:

ok 1 number(s): "1"

Test #16:

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

input:

1
0000100000000000000100000000011100000000111000011111010001100001000000100000100000000100000000010000100000101001100000000000000000000000001000000000101001000000000000000011000100101010000000000000000010000100000101000000000000000000000001010001010101010100101000100000000010101000000000000010010100...

output:

937021270

result:

ok 1 number(s): "937021270"

Test #17:

score: 0
Accepted
time: 9ms
memory: 3736kb

input:

1
0111000101100010011000100001001100100100000011011101000010110001110101101000001001001000011011100001100001010001000101010000010010101001101110111110001101010010010100001101011101011101110001101101110110011010000000110000010001000001100100010101011011010000000001010110001000101101101011000101100101...

output:

202924035

result:

ok 1 number(s): "202924035"

Test #18:

score: 0
Accepted
time: 12ms
memory: 3768kb

input:

1
0111011001110111111111001000111101110100100011111000100001111111111010101101101000010110111111111111111100100111101011110110100010110110111010111001111111111111010110001011111100010010011010010011100100110011011110101011101100101000100110100100110000111010011101101010101001111001001001110111011011...

output:

217010012

result:

ok 1 number(s): "217010012"

Test #19:

score: 0
Accepted
time: 14ms
memory: 3808kb

input:

1
0101111111111110011111101011101100110111111000101110111010010111110111101111110101011010010100111110111111111011001110111110110011111111111110000110111111010111010010111101101101110011111011111111111101101110101111111111111111111101111001110110111111111011111011111111110111111101111011110111111111...

output:

307502808

result:

ok 1 number(s): "307502808"

Test #20:

score: 0
Accepted
time: 11ms
memory: 3772kb

input:

1
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

948020753

result:

ok 1 number(s): "948020753"

Test #21:

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

input:

1000
00010
11001
01001
11010
10011
10101
11011
00111
00011
10101
10001
11011
11111
01011
10111
01101
10111
10011
00111
01111
10101
10101
11111
11101
11100
10001
10011
11011
10101
10100
11011
00001
01111
10011
11011
10100
01001
01011
11101
11011
00011
00011
01001
01001
00001
10011
01011
10001
11011
1...

output:

0
3
3
0
14
7
22
33
14
7
1
22
44
22
33
11
33
14
33
44
7
7
44
11
0
1
14
22
7
0
22
1
44
14
22
0
3
22
11
22
14
14
3
3
1
14
22
1
22
3
0
44
7
22
44
0
33
11
44
33
33
1
7
11
7
22
1
14
7
1
7
1
3
44
14
14
22
22
7
11
11
3
22
22
22
7
7
3
22
3
0
0
14
3
1
7
14
22
1
7
44
44
22
0
1
44
3
11
0
44
14
22
11
22
1
22
1
1...

result:

ok 1000 numbers

Extra Test:

score: 0
Extra Test Passed