QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#694169#9519. Build a ComputerWA_automatonAC ✓1ms3880kbC++233.6kb2024-10-31 17:24:332024-10-31 17:24:33

Judging History

This is the latest submission verdict.

  • [2024-10-31 17:24:33]
  • Judged
  • Verdict: AC
  • Time: 1ms
  • Memory: 3880kb
  • [2024-10-31 17:24:33]
  • Submitted

answer

#include <bits/stdc++.h>
#define int long long
#define x first
#define y second
#define pb push_back
void debug() {std::cerr << "\n";}
template<class T, class... OtherArgs>
void debug(T &&var, OtherArgs &&... args) {
    std::cerr << std::forward<T>(var) << " ";
    debug(std::forward<OtherArgs>(args)...);
}
#define SZ(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
using namespace std;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
using i64 = long long;
using u64 = unsigned long long;
using LD = long double;
using PII = pair<int, int>;
constexpr int N = 200010;
constexpr int P = 1e9 + 7;

vector<PII> adj[310];

void solve() {
    int l, r;
    cin >> l >> r;
    // l = rng() % 10000 + 1, r = rng() % 30000 + l;
    // debug("?", l, r);
    
    auto f = [&](int x, int bit) {
        return x == (1 << bit + 1) - 1;
    };

    map<int, int> mp;
    int tot = 1, highbit = 31 - __builtin_clz(r);
    int zero = -1;
    function<void(int, int, int, int)> solve = [&](int u, int l, int r, int bit) {
        // debug("?", u, l, r, bit);
        // assert(l <= r);
        if (l == 0 && r == 0 && bit == -1) {
            zero = u;
            return;
        }
        if (l == 0 && f(r, bit)) {
            // assert(u != 1);
            int val = (1 << bit + 1) - 1;
            if (bit == 0) {
                if (zero == -1) {
                    zero = ++tot;
                }
                adj[u].pb({zero, 0});
                adj[u].pb({zero, 1});
                return;
            }
            if (!mp[val]) {
                mp[val] = ++tot;
                adj[u].pb({mp[val], 0});
                adj[u].pb({mp[val], 1});
                int rbit = r == 0 ? 0 : 31 - __builtin_clz(r);
                int v = (r == 0 ? 0 : (1 << rbit));
                // debug("!", l, r, rbit);
                solve(tot, 0, r - v, bit - 1);
            } else {
                adj[u].pb({mp[val], 0});
                adj[u].pb({mp[val], 1});
            }
            return;
        }
        
        int lbit = l == 0 ? -1 : 31 - __builtin_clz(l);
        int rbit = r == 0 ? -1 : 31 - __builtin_clz(r);
        if (rbit < bit) {
            // assert(u != 1);
            adj[u].pb({++tot, 0});
            solve(tot, l, r, bit - 1);
        } else if (lbit == rbit) {
            int v = (r == 0 ? 0 : (1 << rbit));
            if (bit == 0) {
                if (zero == -1) {
                    adj[u].pb({++tot, v != 0});
                    // debug("????", l - v, r - v, l, r, v, rbit, bit);
                    solve(tot, l - v, r - v, bit - 1);
                } else {
                    adj[u].pb({zero, v != 0});
                }
            } else {
                adj[u].pb({++tot, 1});
                solve(tot, l - v, r - v, bit - 1);
            }
        } else {
            int v = (r == 0 ? 0 : (1 << rbit));
            adj[u].pb({++tot, 1});
            solve(tot, 0, r - v, bit - 1);
            if (u != 1) {
                adj[u].pb({++tot, 0});
                solve(tot, l, v - 1, bit - 1);
            } else {
                solve(u, l, v - 1, bit - 1);
            }
        }
    };
    solve(1, l, r, highbit);

    cout << tot << '\n';
    for (int i = 1; i <= tot; i++) {
        cout << SZ(adj[i]);
        for (const auto &[v, w] : adj[i]) {
            cout << ' ' << v << ' ' << w;
        }
        cout << '\n';
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(20);
    int _ = 1;
    // cin >> _;
    while (_--) {
        solve();
    }
}

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

詳細信息

Test #1:

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

input:

5 7

output:

5
1 2 1
2 3 1 5 0
2 4 0 4 1
0
1 4 1

result:

ok ok

Test #2:

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

input:

10 27

output:

12
2 2 1 9 1
2 3 1 7 0
1 4 0
2 5 0 5 1
2 6 0 6 1
0
2 8 0 8 1
2 5 0 5 1
2 10 1 11 0
2 5 0 5 1
1 12 1
2 6 0 6 1

result:

ok ok

Test #3:

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

input:

5 13

output:

10
2 2 1 8 1
2 3 1 6 0
1 4 0
2 5 0 5 1
0
2 7 0 7 1
2 5 0 5 1
2 9 1 10 0
2 5 0 5 1
1 5 1

result:

ok ok

Test #4:

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

input:

1 1000000

output:

62
20 2 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 21 1
2 3 1 43 0
2 4 1 41 0
2 5 1 38 0
1 6 0
2 7 1 32 0
1 8 0
1 9 0
1 10 0
1 11 0
2 12 1 28 0
1 13 0
1 14 0
2 15 1 22 0
1 16 0
1 17 0
1 18 0
1 19 0
1 20 0
1 21 0
0
2 23 0 23 1
2 24 0 24 1
2 25 0 25 1
2...

result:

ok ok

Test #5:

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

input:

1 1

output:

2
1 2 1
0

result:

ok ok

Test #6:

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

input:

7 9

output:

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

result:

ok ok

Test #7:

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

input:

3 7

output:

5
2 2 1 5 1
2 3 0 3 1
2 4 0 4 1
0
1 4 1

result:

ok ok

Test #8:

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

input:

1 5

output:

5
3 2 1 5 1 4 1
1 3 0
2 4 0 4 1
0
2 4 0 4 1

result:

ok ok

Test #9:

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

input:

1 4

output:

5
3 2 1 5 1 4 1
1 3 0
1 4 0
0
2 4 0 4 1

result:

ok ok

Test #10:

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

input:

8 9

output:

5
1 2 1
1 3 0
1 4 0
2 5 0 5 1
0

result:

ok ok

Test #11:

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

input:

7 51

output:

14
4 2 1 11 1 12 1 13 1
2 3 1 8 0
1 4 0
1 5 0
2 6 0 6 1
2 7 0 7 1
0
2 9 0 9 1
2 10 0 10 1
2 6 0 6 1
2 9 0 9 1
2 10 0 10 1
1 14 1
1 7 1

result:

ok ok

Test #12:

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

input:

51 79

output:

15
2 2 1 9 1
1 3 0
1 4 0
2 5 0 5 1
2 6 0 6 1
2 7 0 7 1
2 8 0 8 1
0
1 10 1
2 11 1 12 0
2 6 0 6 1
2 13 1 14 0
2 7 0 7 1
1 15 1
1 8 1

result:

ok ok

Test #13:

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

input:

92 99

output:

12
1 2 1
2 3 1 9 0
1 4 0
1 5 0
1 6 0
2 7 0 7 1
2 8 0 8 1
0
1 10 1
1 11 1
1 12 1
2 7 0 7 1

result:

ok ok

Test #14:

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

input:

27 36

output:

14
2 2 1 10 1
1 3 0
1 4 0
2 5 1 8 0
1 6 0
1 7 0
0
2 9 0 9 1
2 7 0 7 1
1 11 1
2 12 1 13 0
2 9 0 9 1
1 14 1
1 7 1

result:

ok ok

Test #15:

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

input:

55 84

output:

19
2 2 1 14 1
1 3 0
2 4 1 11 0
1 5 0
2 6 1 9 0
1 7 0
1 8 0
0
2 10 0 10 1
2 8 0 8 1
2 12 0 12 1
2 13 0 13 1
2 10 0 10 1
1 15 1
2 16 1 17 0
2 13 0 13 1
1 18 1
1 19 1
1 8 1

result:

ok ok

Test #16:

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

input:

297208 929600

output:

70
2 2 1 47 1
2 3 1 45 0
2 4 1 40 0
1 5 0
1 6 0
1 7 0
2 8 1 37 0
1 9 0
2 10 1 35 0
2 11 1 33 0
2 12 1 31 0
2 13 1 28 0
1 14 0
2 15 1 22 0
1 16 0
1 17 0
1 18 0
1 19 0
1 20 0
1 21 0
0
2 23 0 23 1
2 24 0 24 1
2 25 0 25 1
2 26 0 26 1
2 27 0 27 1
2 21 0 21 1
2 29 0 29 1
2 30 0 30 1
2 23 0 23 1
2 32 0 32 ...

result:

ok ok

Test #17:

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

input:

45728 589156

output:

67
5 2 1 46 1 50 1 51 1 52 1
1 3 0
1 4 0
1 5 0
2 6 1 44 0
2 7 1 42 0
2 8 1 40 0
2 9 1 38 0
2 10 1 36 0
2 11 1 33 0
1 12 0
2 13 1 30 0
1 14 0
2 15 1 28 0
2 16 1 24 0
1 17 0
1 18 0
2 19 1 22 0
1 20 0
1 21 0
0
2 23 0 23 1
2 21 0 21 1
2 25 0 25 1
2 26 0 26 1
2 27 0 27 1
2 23 0 23 1
2 29 0 29 1
2 25 0 25...

result:

ok ok

Test #18:

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

input:

129152 138000

output:

48
2 2 1 36 1
1 3 0
1 4 0
1 5 0
1 6 0
2 7 1 34 0
2 8 1 31 0
1 9 0
2 10 1 29 0
2 11 1 24 0
1 12 0
1 13 0
1 14 0
2 15 1 20 0
1 16 0
1 17 0
1 18 0
1 19 0
0
2 21 0 21 1
2 22 0 22 1
2 23 0 23 1
2 19 0 19 1
2 25 0 25 1
2 26 0 26 1
2 27 0 27 1
2 28 0 28 1
2 21 0 21 1
2 30 0 30 1
2 25 0 25 1
2 32 0 32 1
2 3...

result:

ok ok

Test #19:

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

input:

245280 654141

output:

68
3 2 1 49 1 52 1
1 3 0
1 4 0
2 5 1 47 0
2 6 1 45 0
2 7 1 43 0
2 8 1 41 0
2 9 1 39 0
2 10 1 36 0
1 11 0
2 12 1 34 0
2 13 1 30 0
1 14 0
1 15 0
2 16 1 28 0
2 17 1 26 0
2 18 1 24 0
2 19 1 22 0
1 20 0
2 21 0 21 1
0
2 23 0 23 1
2 21 0 21 1
2 25 0 25 1
2 23 0 23 1
2 27 0 27 1
2 25 0 25 1
2 29 0 29 1
2 27...

result:

ok ok

Test #20:

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

input:

202985 296000

output:

63
2 2 1 38 1
1 3 0
1 4 0
2 5 1 32 0
1 6 0
1 7 0
1 8 0
1 9 0
2 10 1 27 0
1 11 0
1 12 0
1 13 0
2 14 1 21 0
1 15 0
1 16 0
1 17 0
1 18 0
1 19 0
1 20 0
0
2 22 0 22 1
2 23 0 23 1
2 24 0 24 1
2 25 0 25 1
2 26 0 26 1
2 20 0 20 1
2 28 0 28 1
2 29 0 29 1
2 30 0 30 1
2 31 0 31 1
2 22 0 22 1
2 33 0 33 1
2 34 0...

result:

ok ok

Test #21:

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

input:

438671 951305

output:

69
2 2 1 44 1
2 3 1 42 0
2 4 1 39 0
1 5 0
2 6 1 33 0
1 7 0
1 8 0
1 9 0
1 10 0
2 11 1 25 0
1 12 0
1 13 0
1 14 0
1 15 0
1 16 0
1 17 0
2 18 1 22 0
1 19 0
1 20 0
2 21 0 21 1
0
2 23 0 23 1
2 24 0 24 1
2 21 0 21 1
2 26 0 26 1
2 27 0 27 1
2 28 0 28 1
2 29 0 29 1
2 30 0 30 1
2 31 0 31 1
2 32 0 32 1
2 23 0 2...

result:

ok ok

Test #22:

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

input:

425249 739633

output:

71
2 2 1 45 1
1 3 0
2 4 1 43 0
2 5 1 40 0
1 6 0
2 7 1 36 0
1 8 0
1 9 0
2 10 1 32 0
1 11 0
1 12 0
2 13 1 28 0
1 14 0
1 15 0
2 16 1 26 0
2 17 1 22 0
1 18 0
1 19 0
1 20 0
2 21 0 21 1
0
2 23 0 23 1
2 24 0 24 1
2 25 0 25 1
2 21 0 21 1
2 27 0 27 1
2 23 0 23 1
2 29 0 29 1
2 30 0 30 1
2 31 0 31 1
2 27 0 27 ...

result:

ok ok

Test #23:

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

input:

551207 961718

output:

75
1 2 1
2 3 1 48 0
2 4 1 45 0
1 5 0
2 6 1 42 0
1 7 0
2 8 1 39 0
1 9 0
2 10 1 37 0
2 11 1 33 0
1 12 0
1 13 0
2 14 1 30 0
1 15 0
2 16 1 28 0
2 17 1 25 0
1 18 0
2 19 1 23 0
2 20 1 22 0
1 21 0
0
2 21 0 21 1
2 24 0 24 1
2 21 0 21 1
2 26 0 26 1
2 27 0 27 1
2 24 0 24 1
2 29 0 29 1
2 26 0 26 1
2 31 0 31 1
...

result:

ok ok

Test #24:

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

input:

114691 598186

output:

74
4 2 1 43 1 46 1 47 1
1 3 0
1 4 0
2 5 1 39 0
1 6 0
1 7 0
2 8 1 32 0
1 9 0
1 10 0
1 11 0
1 12 0
1 13 0
2 14 1 29 0
1 15 0
2 16 1 26 0
1 17 0
2 18 1 23 0
1 19 0
2 20 1 22 0
1 21 0
0
2 21 0 21 1
2 24 0 24 1
2 25 0 25 1
2 21 0 21 1
2 27 0 27 1
2 28 0 28 1
2 24 0 24 1
2 30 0 30 1
2 31 0 31 1
2 27 0 27 ...

result:

ok ok

Test #25:

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

input:

234654 253129

output:

57
1 2 1
1 3 1
1 4 1
2 5 1 37 0
1 6 0
2 7 1 35 0
2 8 1 33 0
2 9 1 29 0
1 10 0
1 11 0
2 12 1 27 0
2 13 1 23 0
1 14 0
1 15 0
2 16 1 20 0
1 17 0
1 18 0
2 19 0 19 1
0
2 21 0 21 1
2 22 0 22 1
2 19 0 19 1
2 24 0 24 1
2 25 0 25 1
2 26 0 26 1
2 21 0 21 1
2 28 0 28 1
2 24 0 24 1
2 30 0 30 1
2 31 0 31 1
2 32 ...

result:

ok ok

Test #26:

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

input:

554090 608599

output:

61
1 2 1
1 3 0
1 4 0
2 5 1 38 0
1 6 0
2 7 1 34 0
1 8 0
1 9 0
2 10 1 30 0
1 11 0
1 12 0
2 13 1 27 0
1 14 0
2 15 1 24 0
1 16 0
2 17 1 22 0
1 18 0
2 19 0 19 1
2 20 0 20 1
2 21 0 21 1
0
2 23 0 23 1
2 19 0 19 1
2 25 0 25 1
2 26 0 26 1
2 23 0 23 1
2 28 0 28 1
2 29 0 29 1
2 25 0 25 1
2 31 0 31 1
2 32 0 32 ...

result:

ok ok

Extra Test:

score: 0
Extra Test Passed