QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#474811#8594. Fieldnhuang685#13 138ms6524kbC++204.9kb2024-07-13 06:26:582024-07-13 06:26:58

Judging History

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

  • [2024-07-13 06:26:58]
  • 评测
  • 测评结果:13
  • 用时:138ms
  • 内存:6524kb
  • [2024-07-13 06:26:58]
  • 提交

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%