QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#123996#89. Restore ArrayQwerty1232#13 9ms3944kbC++173.7kb2023-07-14 02:41:582024-07-04 00:38:45

Judging History

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

  • [2024-07-04 00:38:45]
  • 评测
  • 测评结果:13
  • 用时:9ms
  • 内存:3944kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-14 02:41:58]
  • 提交

answer

#include <bits/stdc++.h>

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

    int n, m;
    std::cin >> n >> m;
    std::vector<std::array<int, 4>> input(m);
    for (auto& [l, r, k, val] : input) {
        std::cin >> l >> r >> k >> val;
        r++;
        k--;
    }

    const auto true_inp = input;

    auto check = [&](std::vector<int> ans) {
        bool fail = false;
        auto& input = true_inp;
        for (auto& [l, r, k, val] : input) {
            int sum = std::accumulate(ans.begin() + l, ans.begin() + r, 0);
            if (val == 0) {
                fail = fail || ((r - l) - sum <= k);
            } else {
                fail = fail || (sum < (r - l) - k);
            }
            if (fail) {
                break;
            }
        }
        return !fail;
    };

    if (n <= 18 && 0) {
        for (int mask = 0; mask < (1 << n); mask++) {
            std::vector<int> ans(n);
            for (int j = 0; j < n; j++) {
                ans[j] = (mask >> j) & 1;
            }
            if (check(ans)) {
                for (int i = 0; i < n; i++) {
                    std::cout << ans[i] << " \n"[i == n - 1];
                }
                return 0;
            }
        }
        std::cout << "-1\n";
        return 0;
    }

    std::vector<int> ans(n, -1);
    std::array<std::vector<int>, 3> prf;

    auto recalc = [&]() {
        for (int i = 0; i < 3; i++) {
            prf[i].assign(n + 1, 0);
            for (int j = 0; j < n; j++) {
                prf[i][j + 1] = prf[i][j] + (ans[j] == i - 1);
            }
        }
    };
    auto get = [&](int c, int l, int r) {
        return prf[c + 1][r] - prf[c + 1][l];
    };

    while (true) {
        recalc();

        bool fail = false;
        for (auto& [l, r, k, val] : input) {
            if (val == 0 && get(0, l, r) > k) {
                l = r = k = val = -1;
                continue;
            }
            if (val == 1 && get(1, l, r) >= (r - l - k)) {
                l = r = k = val = -1;
                continue;
            }

            if (get(-1, l, r) == 0) {
                std::cout << "-1\n";
                return 0;
            }

            if (val == 0 && k == r - l - 1 || val == 1 && k == 0) {
                for (int i = l; i < r; i++) {
                    if (ans[i] >= 0 && ans[i] != val) {
                        std::cout << "-1\n";
                        return 0;
                    }
                    assert(ans[i] == -1 || ans[i] == val);
                    ans[i] = val;
                }
                l = r = k = val = -1;
                fail = true;
                break;
            }
            assert(val == 0 && k == 0 || val == 1 && k == r - l - 1);

            if (get(-1, l, r) == 1) {
                int it = std::find(ans.begin() + l, ans.begin() + r, -1) - ans.begin();
                assert(it != r);

                ans[it] = val;
                l = r = k = val = -1;
                fail = true;
                break;
            }
        }
        input.erase(std::remove(input.begin(), input.end(), std::array<int, 4>{-1, -1, -1, -1}), input.end());

        if (!fail) {
            for (auto& [l, r, k, val] : input) {
                assert(get(-1, l, r) >= 2);
            }
            for (int i = 0, c = 0; i < n; i++) {
                if (ans[i] == -1) {
                    ans[i] = c++ % 2;
                }
            }

            assert(check(ans));
            for (int i = 0; i < n; i++) {
                std::cout << ans[i] << " \n"[i == n - 1];
            }
            return 0;
        }
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

input:

8 13
0 1 2 1
3 5 1 1
5 7 2 1
0 2 2 0
2 5 3 1
3 7 4 1
2 2 1 0
0 1 1 0
2 7 5 1
2 4 1 0
0 4 2 0
4 5 2 1
1 2 1 0

output:


result:


Subtask #2:

score: 13
Accepted

Test #11:

score: 13
Accepted
time: 8ms
memory: 3944kb

input:

4992 9040
331 4442 1 0
3489 4173 1 0
393 4420 1 0
1324 2666 1 0
1317 4131 1 0
399 3010 1 0
1843 4154 1 0
1119 4876 1 0
4216 4980 1 0
2003 4370 1 0
769 1927 1 0
934 3414 1 0
2072 2507 1 0
215 3526 1 0
1493 4107 1 0
539 1643 1 0
2783 4338 1 0
967 1190 1 0
1374 2868 1 0
34 1378 1 0
71 1418 1 0
2120 223...

output:

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ...

result:

ok your plan is correct!

Test #12:

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

input:

4952 9496
4222 4300 1 0
2892 4392 1 0
4158 4700 1 0
2720 3468 1 0
3002 3114 1 0
1010 4681 1 0
629 4392 1 0
734 2030 1 0
1024 2836 1 0
299 2880 1 0
3728 4858 1 0
1616 2861 1 0
2716 2938 1 0
1265 2892 1 0
1695 1778 1 0
1414 2231 1 0
47 4835 1 0
1554 3489 1 0
2591 3178 1 0
2424 4665 1 0
1089 2460 1 0
2...

output:

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ...

result:

ok your plan is correct!

Test #13:

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

input:

4995 9192
257 4428 1 0
2504 2636 1 0
208 4875 1 0
1462 2898 1 0
1000 2298 1 0
4596 4745 1 0
614 4072 1 0
1425 1941 1 0
2378 4165 1 0
496 1556 1 0
255 4838 1 0
76 2176 1 0
349 3143 1 0
1325 4409 1 0
854 3653 1 0
4656 4945 1 0
2957 4396 1 0
784 4891 1 0
4488 4917 1 0
1721 4188 1 0
231 4748 1 0
282 332...

output:

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ...

result:

ok your plan is correct!

Test #14:

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

input:

4938 9603
2957 4666 1 0
2348 3586 1 0
3501 3789 1 0
2741 4713 1 0
1217 1254 1 0
192 2857 1 0
1242 2716 1 0
2315 4140 1 0
2464 2912 1 0
189 2590 1 0
4150 4701 1 0
3604 3942 1 0
2491 2801 1 0
1009 2819 1 0
1508 3589 1 0
88 4021 1 0
86 487 1 0
2857 4336 1 0
1738 4473 1 0
1385 1969 1 0
3187 4675 1 0
753...

output:

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ...

result:

ok your plan is correct!

Test #15:

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

input:

4923 9528
377 1664 1 0
629 4786 1 0
0 3255 1 0
785 3022 1 1
1009 2063 1 1
3041 4632 1 1
156 3479 1 0
107 4762 1 0
140 1296 1 1
1542 4475 1 0
935 2058 1 0
1230 2832 1 0
2616 2756 1 1
1184 1951 1 0
481 4708 1 0
550 3300 1 0
791 1219 1 0
2423 4289 1 1
1558 2502 1 0
720 2744 1 0
3282 4611 1 1
1795 2077 ...

output:

-1

result:

ok No Solution!

Test #16:

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

input:

4993 9026
407 4008 1 0
1175 3810 1 0
1935 3175 1 0
702 3112 1 0
759 4120 1 0
350 2774 1 1
3711 3813 1 1
1723 2232 1 0
1938 2653 1 1
3780 4873 1 0
1765 4967 1 1
1444 3182 1 1
2189 3485 1 0
1101 1385 1 0
1684 1892 1 1
658 1163 1 0
4143 4382 1 0
2683 4035 1 1
539 4555 1 0
2188 4158 1 0
1081 4527 1 1
42...

output:

-1

result:

ok No Solution!

Subtask #3:

score: 0
Skipped

Dependency #1:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

0%