QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#474811 | #8594. Field | nhuang685# | 13 | 138ms | 6524kb | C++20 | 4.9kb | 2024-07-13 06:26:58 | 2024-07-13 06:26:58 |
Judging History
answer
#include <bits/stdc++.h>
constexpr std::array<int, 4> dx{-1, 0, 1, 0}, dy{0, 1, 0, -1};
constexpr int INF = 0x3f3f3f3f;
constexpr int64_t LLINF = 0x3f3f3f3f3f3f3f3f;
template <class T> struct CC {
std::vector<T> val;
void insert(T v) {
val.push_back(v);
}
void init() {
std::ranges::sort(val);
val.erase(std::unique(val.begin(), val.end()), val.end());
}
int cc(T v) {
return static_cast<int>(std::lower_bound(val.begin(), val.end(), v) -
val.begin());
}
};
void solve1(int n, int q) {
CC<int> cx, cy;
std::vector<int> a(n), b(n), c(n), d(n);
cx.insert(0);
cy.insert(0);
for (int i = 0; i < n; ++i) {
std::cin >> a[i] >> b[i] >> c[i] >> d[i];
cx.insert(a[i]);
cx.insert(b[i]);
cy.insert(c[i]);
cy.insert(d[i]);
cx.insert(a[i] - 1);
cx.insert(b[i] + 1);
cy.insert(c[i] - 1);
cy.insert(d[i] + 1);
}
cx.init();
cy.init();
for (int &i : a) {
i = cx.cc(i);
}
for (int &i : b) {
i = cx.cc(i);
}
for (int &i : c) {
i = cy.cc(i);
}
for (int &i : d) {
i = cy.cc(i);
}
int sx = static_cast<int>(cx.val.size());
int sy = static_cast<int>(cy.val.size());
auto good = [&](int nx, int ny) -> bool {
if (nx < 0 || nx >= sx || ny < 0 || ny >= sy) {
return false;
}
for (int i = 0; i < n; ++i) {
if (a[i] <= nx && nx <= b[i] && c[i] <= ny && ny <= d[i]) {
return false;
}
}
return true;
};
auto comp = [](int64_t lx, int64_t ly, int64_t rx, int64_t ry) {
return std::abs(lx - rx) + std::abs(ly - ry);
};
std::vector dist(sx, std::vector<int64_t>(sy, LLINF));
dist[cx.cc(0)][cy.cc(0)] = 0;
using T = std::pair<int64_t, std::pair<int, int>>;
std::priority_queue<T, std::vector<T>, std::greater<>> pq;
pq.emplace(0, std::pair{cx.cc(0), cy.cc(0)});
while (!pq.empty()) {
auto [dd, loc] = pq.top();
pq.pop();
auto [lx, ly] = loc;
if (dd != dist[lx][ly]) {
continue;
}
for (int diff = 0; diff < 4; ++diff) {
int nx = lx + dx[diff];
int ny = ly + dy[diff];
if (!good(nx, ny)) {
continue;
}
int64_t nd = static_cast<int64_t>(std::abs(cx.val[lx] - cx.val[nx])) +
std::abs(cy.val[ly] - cy.val[ny]);
if (dist[nx][ny] > dist[lx][ly] + nd) {
dist[nx][ny] = dist[lx][ly] + nd;
pq.emplace(dist[nx][ny], std::pair{nx, ny});
}
}
}
while ((q--) != 0) {
int x, y;
std::cin >> x >> y;
bool g = true;
for (int i = 0; i < n; ++i) {
if (cx.val[a[i]] <= x && x <= cx.val[b[i]] &&
cy.val[c[i]] <= y && y <= cy.val[d[i]]) {
g = false;
break;
}
}
if (!g) {
std::cout << "-1\n";
continue;
}
std::vector<int> px, py;
int id = cx.cc(x);
if (id == sx) {
px.push_back(id - 1);
} else if (id == 0 || cx.val[id] == x) {
px.push_back(id);
} else {
px.push_back(id - 1);
px.push_back(id);
}
id = cy.cc(y);
if (id == sy) {
py.push_back(id - 1);
} else if (id == 0 || cy.val[id] == y) {
py.push_back(id);
} else {
py.push_back(id - 1);
py.push_back(id);
}
int64_t ans = INF;
for (int i : px) {
for (int j : py) {
ans = std::min(ans, dist[i][j] + comp(cx.val[i], cy.val[j], x, y));
}
}
if (ans == INF) {
std::cout << "-1\n";
} else {
std::cout << ans << '\n';
}
}
}
constexpr int B = 400;
void solve2(int n, int q) {
std::vector gr(2 * B + 1, std::vector<bool>(2 * B + 1));
for (int i = 0; i < n; ++i) {
int a, b, c, d;
std::cin >> a >> b >> c >> d;
for (int j = a; j <= b; ++j) {
for (int k = c; k <= d; ++k) {
gr[j + B][k + B] = true;
}
}
}
std::vector dist(2 * B + 1, std::vector<int>(2 * B + 1, INF));
dist[B][B] = 0;
std::vector<int> num(B + 1);
std::queue<std::pair<int, int>> qq;
qq.emplace(0, 0);
while (!qq.empty()) {
auto [x, y] = qq.front();
qq.pop();
++num[dist[x + B][y + B]];
if (dist[x + B][y + B] == B) {
continue;
}
for (int d = 0; d < 4; ++d) {
int nx = x + dx[d];
int ny = y + dy[d];
if (nx < -B || nx > B || ny < -B || ny > B || gr[nx + B][ny + B]) {
continue;
}
if (dist[nx + B][ny + B] > dist[x + B][y + B] + 1) {
dist[nx + B][ny + B] = dist[x + B][y + B] + 1;
qq.emplace(nx, ny);
}
}
}
std::partial_sum(num.begin(), num.end(), num.begin());
while ((q--) != 0) {
int m;
std::cin >> m;
std::cout << num[m] << '\n';
}
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n, t, q;
std::cin >> n >> t >> q;
if (t == 1) {
solve1(n, q);
} else {
solve2(n, q);
}
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 5
Accepted
Test #1:
score: 5
Accepted
time: 77ms
memory: 3924kb
input:
100 1 200000 387 400 -379 -369 383 396 -400 -387 325 394 365 391 386 390 -356 -347 -384 -373 -400 -337 381 396 -382 -363 -397 -346 -392 -348 370 370 -378 -350 -391 -382 -398 -394 392 400 397 398 362 372 297 389 377 389 -399 -297 -378 -303 -394 -388 -369 -328 -357 -353 385 391 -350 -325 397 398 -381 ...
output:
772 693 689 637 751 723 481 703 797 689 701 615 707 761 650 551 724 710 410 715 690 759 615 406 754 724 649 601 699 726 717 725 710 416 727 661 677 630 727 760 758 728 664 539 755 679 784 613 671 639 683 744 522 495 761 703 680 752 689 501 699 653 682 345 725 727 686 684 615 627 409 706 704 421 693 ...
result:
ok 200000 numbers
Test #2:
score: 0
Accepted
time: 138ms
memory: 4004kb
input:
100 1 200000 2 7 50 113 119 157 -333 -316 156 156 148 158 -99 -43 -60 -51 -290 -272 -263 -262 -192 -192 203 204 -396 -390 -156 -148 -90 -89 -247 -242 -90 -47 -258 -246 -315 -308 360 371 385 390 259 260 222 290 -334 -326 12 19 69 85 -212 -210 -369 -314 -330 -322 -118 -95 -92 -83 48 76 -313 -309 51 58...
output:
385 292 217 783 593 482 146 774 262 228 521 532 509 491 709 517 442 190 486 338 588 510 451 163 379 463 460 192 499 458 368 378 375 381 153 317 282 290 415 179 541 717 399 313 318 572 183 308 560 545 709 714 237 602 229 180 166 413 620 255 473 218 486 244 546 539 237 288 282 519 264 608 301 250 486 ...
result:
ok 200000 numbers
Test #3:
score: 0
Accepted
time: 129ms
memory: 3844kb
input:
100 1 200000 260 323 -196 -174 5 8 57 79 -302 -275 -31 -12 62 72 97 99 330 333 -374 -302 -80 -75 -99 -87 -51 -36 -369 -338 135 136 -10 15 -391 -356 -95 -86 -274 -263 -338 -334 -271 -253 -185 -165 11 17 371 394 -24 135 -375 -372 310 322 -255 -239 -283 -277 -205 -176 -354 -261 -375 -364 -364 -351 -247...
output:
224 597 249 331 56 190 182 399 550 291 390 164 201 411 492 390 519 153 711 461 206 555 555 387 224 362 455 160 633 521 95 516 462 466 380 236 381 239 421 491 439 580 239 750 311 696 543 558 328 389 449 139 276 476 298 380 202 577 402 228 295 507 687 467 342 379 157 341 501 229 394 507 380 357 253 40...
result:
ok 200000 numbers
Test #4:
score: 0
Accepted
time: 45ms
memory: 3536kb
input:
30 1 200000 0 37 33 33 0 0 33 37 0 45 -45 -45 0 0 -45 -45 0 88 49 49 0 0 49 88 0 110 -92 -92 0 0 -110 -92 0 139 129 129 0 0 129 139 0 174 162 162 0 0 162 174 0 205 -188 -188 0 0 -205 -188 0 236 -230 -230 0 0 -236 -230 0 239 -237 -237 0 0 -239 -237 0 259 -249 -249 0 0 -259 -249 0 286 262 262 0 0 262 ...
output:
524 345 141 565 642 330 425 662 370 337 419 230 765 347 240 235 299 317 373 252 432 574 581 348 378 395 262 424 230 393 497 592 442 347 603 491 225 194 483 364 386 736 343 378 677 676 652 479 594 579 566 298 164 672 554 427 158 293 405 447 455 560 240 462 564 276 270 455 359 446 544 228 400 428 456 ...
result:
ok 200000 numbers
Test #5:
score: 0
Accepted
time: 59ms
memory: 3900kb
input:
30 1 200000 -9 17 5 5 -22 25 9 13 -26 31 17 26 -30 38 27 29 -44 53 33 45 -76 79 51 57 -86 91 -67 -66 -91 99 71 71 -95 105 78 79 -131 136 -89 -88 -141 147 -99 -96 -150 151 -113 -112 -162 170 115 127 -190 191 128 134 -219 222 -154 -147 -235 245 157 157 -235 244 -162 -157 -240 242 -205 -170 -262 271 21...
output:
296 549 423 276 550 641 344 51 94 382 478 472 346 325 370 298 333 289 173 579 1001 690 714 229 538 898 368 927 489 946 712 804 200 322 445 740 703 763 716 315 363 320 233 422 443 440 1016 713 463 888 795 673 369 679 413 512 161 539 1061 476 605 942 396 764 441 314 346 553 123 323 407 422 422 883 157...
result:
ok 200000 numbers
Test #6:
score: 0
Accepted
time: 75ms
memory: 3760kb
input:
100 1 200000 0 18 2 12 4 18 -2 12 -16 18 -2 -1 -16 -15 -2 17 -16 -1 18 18 24 33 -20 18 -25 33 -20 -6 -25 -20 -20 37 -25 -17 38 46 41 50 -29 46 -45 50 -29 -25 -45 -28 -29 50 -45 -26 51 61 56 56 -45 61 -54 56 -45 -42 -54 -48 -45 64 -54 -46 65 69 74 77 -50 69 -66 77 -50 -47 -66 -57 -50 93 -66 -55 94 12...
output:
716 1439 205 898 543 419 1043 374 568 445 720 928 1302 604 1502 529 495 344 488 19 957 127 1260 964 805 594 295 1143 781 814 913 1100 329 337 388 1286 629 561 922 61 497 522 501 645 757 1498 624 589 1340 713 446 1179 444 964 1541 806 965 1140 1397 563 1235 267 312 1314 1540 799 487 479 227 1646 354 ...
result:
ok 200000 numbers
Test #7:
score: 0
Accepted
time: 40ms
memory: 3572kb
input:
9 1 200000 -1 1 -1 -1 -1 -1 -1 400 1 1 -1 400 -400 -1 400 400 1 400 400 400 -400 -400 -400 400 400 400 -400 400 -400 -1 -400 -400 1 400 -400 -400 -274 -11 -227 -378 -141 388 17 44 -365 87 -112 138 -357 -279 159 -223 299 -246 148 237 -50 -362 -101 -164 -232 -353 -133 110 39 -11 104 168 -75 296 323 -3...
output:
2669 2255 2935 2467 2858 2656 2484 2342 2459 2791 2094 2343 2285 2649 2434 2678 2777 2394 3066 2760 2576 2408 2231 2275 2938 2670 2881 2771 2527 2339 2672 2701 2173 2119 2357 2127 2957 2781 2598 2144 2139 2811 2307 2631 2735 2886 2409 2580 2633 2831 2693 3056 2781 2596 2862 2554 2378 2212 2549 2502 ...
result:
ok 200000 numbers
Subtask #2:
score: 0
Wrong Answer
Test #8:
score: 17
Accepted
time: 75ms
memory: 3708kb
input:
100 1 200000 -520000000 799999999 670000000 899999999 -870000000 -570000001 290000000 519999999 200000000 839999999 -770000000 769999999 480000000 949999999 -690000000 -1 -910000000 -390000001 380000000 939999999 370000000 879999999 850000000 889999999 -630000000 699999999 270000000 359999999 120000...
output:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 14351189 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
result:
ok 200000 numbers
Test #9:
score: -17
Wrong Answer
time: 131ms
memory: 3704kb
input:
100 1 200000 -620000000 -450000001 -820000000 -690000001 620000000 809999999 750000000 769999999 560000000 579999999 180000000 229999999 300000000 329999999 -710000000 -540000001 210000000 239999999 110000000 159999999 560000000 719999999 -980000000 -920000001 490000000 499999999 -490000000 -4700000...
output:
1024986489 -1 1058204258 -1 -1 943526995 -1 -1 -1 1004036466 -1 184720367 511961447 887040857 -1 -1 221191600 -1 -1 921328973 849134264 -1 380394974 -1 528034469 -1 827414176 -1 -1 331255444 -1 -1 1037197792 634511436 -1 -1 -1 920740680 771874700 529230554 -1 -1 -1 -1 -1 -1 -1 -1 522079474 421897023...
result:
wrong answer 2nd numbers differ - expected: '1503057919', found: '-1'
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 8
Accepted
Test #21:
score: 8
Accepted
time: 1ms
memory: 5680kb
input:
100 2 200 0 0 1 1 0 0 -1 -1 1 1 0 0 -1 -1 0 2 0 0 -1 -1 -1 -1 0 0 -1 -1 0 0 -1 -1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 2 -1 0 1 1 0 0 -1 -1 0 0 -1 -1 0 0 1 1 0 0 0 1 1 1 -2 -1 0 0 -1 -1 0 0 -1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 0 1 1 -1 -1 0 0 -1 0 -1 -1 -1 -1 0 0 0 0 -1 -1 1 1 0 0 1 1 0 0 0 0 -1 -1 -1 0 1 1 -1 ...
output:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
result:
ok 200 numbers
Test #22:
score: 0
Accepted
time: 5ms
memory: 6172kb
input:
100 2 400 390 390 -392 -257 -400 -343 301 386 310 395 373 391 398 399 -387 -339 -385 -369 -395 -374 354 362 380 399 -389 -386 -359 -359 357 392 369 396 369 385 -394 -332 -385 -375 331 357 374 389 -389 -328 368 397 384 397 326 384 361 389 320 395 367 395 309 367 -393 -357 -396 -373 344 365 -355 -349 ...
output:
98125 19013 258481 5725 613 194065 255613 11401 86113 218461 87781 124501 31001 32005 237361 208013 9385 196565 183013 79601 166465 174641 56785 244301 93745 282001 55445 1301 9661 76441 74113 139921 101701 201613 313 289561 12325 2665 309685 148513 294145 5941 265721 11705 56113 41185 35113 54121 3...
result:
ok 400 numbers
Test #23:
score: 0
Accepted
time: 56ms
memory: 5776kb
input:
100 2 400 -400 400 1 400 1 400 -400 400 -400 400 -400 -1 -400 -1 -400 400 -400 400 1 400 1 400 -400 400 -400 400 -400 -1 -400 -1 -400 400 -400 400 1 400 1 400 -400 400 -400 400 -400 -1 -400 -1 -400 400 -400 400 1 400 1 400 -400 400 -400 400 -400 -1 -400 -1 -400 400 -400 400 1 400 1 400 -400 400 -400...
output:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
result:
ok 400 numbers
Test #24:
score: 0
Accepted
time: 5ms
memory: 6524kb
input:
100 2 200 -7 -2 300 381 -101 -87 -339 -318 190 230 388 399 246 259 -181 -169 304 308 367 376 73 128 -116 -115 57 77 142 147 -215 -205 210 211 -53 -19 84 97 -243 -235 -86 -86 -88 -63 130 214 142 167 268 269 -100 -95 105 110 272 275 302 304 -239 -207 -329 -329 332 378 197 206 -172 -171 -229 -221 376 3...
output:
10553 262091 17282 460 22075 216829 200530 157822 177644 286773 85344 73997 9428 64510 113 224091 21238 82284 21655 71033 41645 4207 202797 236619 157822 70299 214448 188335 260692 3682 237899 139495 282282 236619 640 2740 20824 9982 126705 259299 253784 18425 21238 166171 272045 25990 33598 256529 ...
result:
ok 200 numbers
Test #25:
score: 0
Accepted
time: 5ms
memory: 6256kb
input:
100 2 400 -145 -127 -202 -194 235 244 260 272 61 69 250 269 -79 -75 -57 -55 312 324 59 108 37 65 -168 -161 331 341 -258 -231 342 371 313 320 66 68 -224 -221 208 300 -273 -259 103 109 -360 -340 235 239 -284 -163 241 262 -209 -207 349 361 -243 -174 -374 -361 -41 -35 -323 -319 -55 -52 357 372 -151 -135...
output:
3431 13179 16759 295766 64513 71565 78722 41201 40651 62473 235266 34270 176168 248803 287096 19099 74437 164583 685 143728 116851 136383 170330 76582 23305 5489 27409 269939 365 14211 221 8020 1945 18303 2638 265648 113193 51930 761 179697 6101 135348 13 106817 30300 84533 49065 162318 191678 55435...
result:
ok 400 numbers
Test #26:
score: 0
Accepted
time: 5ms
memory: 6236kb
input:
100 2 200 -369 -360 169 205 114 121 343 357 148 158 -255 -244 225 228 123 136 347 357 319 344 228 235 -319 -297 337 342 -63 -56 171 172 218 225 149 164 327 348 364 364 53 83 98 116 190 196 287 295 47 48 -123 -117 221 226 -49 -24 313 314 -73 -73 6 6 -347 -271 48 96 -108 -94 385 396 282 294 260 267 -1...
output:
284241 59833 2245 211438 64024 235859 104283 77291 292883 285677 198992 39854 32490 4901 11971 229345 93572 11374 23744 1405 5305 86798 8321 57787 234551 46255 135468 8581 29574 6613 90998 134457 70525 9939 233246 37670 85162 185931 297212 80387 111746 242449 43271 264363 38754 16237 16965 40973 884...
result:
ok 200 numbers
Subtask #5:
score: 0
Runtime Error
Test #27:
score: 0
Runtime Error
input:
100 2 400 930000000 979999999 950000000 979999999 800000000 829999999 830000000 939999999 980000000 999999999 970000000 989999999 -1000000000 -990000001 -1000000000 -960000001 950000000 979999999 -1000000000 -770000001 -970000000 -910000001 -950000000 -900000001 -970000000 -890000001 860000000 91999...
output:
result:
Subtask #6:
score: 0
Skipped
Dependency #4:
100%
Accepted
Dependency #5:
0%
Subtask #7:
score: 0
Skipped
Dependency #6:
0%
Subtask #8:
score: 0
Skipped
Dependency #7:
0%
Subtask #9:
score: 0
Skipped
Dependency #8:
0%