QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#123996 | #89. Restore Array | Qwerty1232# | 13 | 9ms | 3944kb | C++17 | 3.7kb | 2023-07-14 02:41:58 | 2024-07-04 00:38:45 |
Judging History
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%