답안 #579320

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
579320 2022-06-18T20:29:49 Z lumibons Two Transportations (JOI19_transportations) C++17
100 / 100
781 ms 60536 KB
#include "Azer.h"
#include <bits/stdc++.h>

using namespace std;

namespace {

int n, cd = 0, ai, ad, bi, bd, d[2100];
bool v[2100];
priority_queue<pair<int, int>> pq;
vector<pair<int, int>> e[2100];

void init(int N, int A, vector<int> U, vector<int> V, vector<int> C) {
  n = N;
  for (int i = 0; i < n; i++)
    d[i] = 1e9;
  d[0] = 0;
  pq.emplace(0, 0);
  for (int i = 0; i < A; ++i) {
    e[U[i]].emplace_back(V[i], C[i]);
    e[V[i]].emplace_back(U[i], C[i]);
  }
}

int next() {
  while (!pq.empty()) {
    auto [nd, i] = pq.top();
    if (!v[i])
      return i;
    pq.pop();
  }
  return -1;
}

void update(int i, int nd) {
  cd = nd;
  d[i] = nd;
  v[i] = true;
  for (auto [j, c] : e[i])
    if (d[i] + c < d[j]) {
      d[j] = d[i] + c;
      pq.emplace(-d[j], j);
    }
}

int cntInt = 0, phase, bitCnt;

void startInt() {
  if (cntInt == n)
    return;
  cntInt++;
  ai = next();
  ad = ai == -1 ? 501 : d[ai] - cd;
  for (int b = 8; b >= 0; b--)
    SendA((ad >> b) & 1);
  bi = bd = 0;
  phase = 0;
  bitCnt = 0;
}

void receiveBD(bool x) {
  bd = (bd << 1) + (x ? 1 : 0);
  bitCnt++;
  if (bitCnt == 9) {
    if (ad <= bd) {
      for (int b = 10; b >= 0; b--)
        SendA((ai >> b) & 1);
      update(ai, cd + ad);
      startInt();
    } else {
      phase = 1;
      bitCnt = 0;
    }
  }
}

void receiveBI(bool x) {
  bi = (bi << 1) + (x ? 1 : 0);
  bitCnt++;
  if (bitCnt == 11) {
    update(bi, cd + bd);
    startInt();
  }
}

}  // namespace

void InitA(int N, int A, std::vector<int> U, std::vector<int> V,
           std::vector<int> C) {
  init(N, A, U, V, C);
  startInt();
}

void ReceiveA(bool x) {
  if (phase == 0)
    receiveBD(x);
  else
    receiveBI(x);
}

std::vector<int> Answer() {
  std::vector<int> ans(n);
  for (int i = 0; i < n; i++)
    ans[i] = d[i];
  return ans;
}
#include "Baijan.h"
#include <bits/stdc++.h>

using namespace std;

namespace {

int n, cd = 0, ai, ad, bi, bd, d[2100];
bool v[2100];
priority_queue<pair<int, int>> pq;
vector<pair<int, int>> e[2100];

void init(int N, int A, vector<int> U, vector<int> V, vector<int> C) {
  n = N;
  for (int i = 0; i < n; i++)
    d[i] = 1e9;
  d[0] = 0;
  pq.emplace(0, 0);
  for (int i = 0; i < A; ++i) {
    e[U[i]].emplace_back(V[i], C[i]);
    e[V[i]].emplace_back(U[i], C[i]);
  }
}

int next() {
  while (!pq.empty()) {
    auto [nd, i] = pq.top();
    if (!v[i])
      return i;
    pq.pop();
  }
  return -1;
}

void update(int i, int nd) {
  cd = nd;
  d[i] = nd;
  v[i] = true;
  for (auto [j, c] : e[i])
    if (d[i] + c < d[j]) {
      d[j] = d[i] + c;
      pq.emplace(-d[j], j);
    }
}

int cntInt = 0, phase, bitCnt;

void startInt() {
  if (cntInt == n)
    return;
  cntInt++;
  ai = next();
  ad = ai == -1 ? 501 : d[ai] - cd;
  for (int b = 8; b >= 0; b--)
    SendB((ad >> b) & 1);
  bi = bd = 0;
  phase = 0;
  bitCnt = 0;
}

void receiveBD(bool x) {
  bd = (bd << 1) + (x ? 1 : 0);
  bitCnt++;
  if (bitCnt == 9) {
    if (ad < bd) {
      for (int b = 10; b >= 0; b--)
        SendB((ai >> b) & 1);
      update(ai, cd + ad);
      startInt();
    } else {
      phase = 1;
      bitCnt = 0;
    }
  }
}

void receiveBI(bool x) {
  bi = (bi << 1) + (x ? 1 : 0);
  bitCnt++;
  if (bitCnt == 11) {
    update(bi, cd + bd);
    startInt();
  }
}

}  // namespace

void InitB(int N, int B, std::vector<int> S, std::vector<int> T,
           std::vector<int> D) {
  init(N, B, S, T, D);
  startInt();
}

void ReceiveB(bool y) {
  if (phase == 0)
    receiveBD(y);
  else
    receiveBI(y);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 550 ms 788 KB Output is correct
2 Correct 2 ms 656 KB Output is correct
3 Correct 528 ms 796 KB Output is correct
4 Correct 541 ms 12656 KB Output is correct
5 Correct 34 ms 912 KB Output is correct
6 Correct 528 ms 2676 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 656 KB Output is correct
2 Correct 441 ms 756 KB Output is correct
3 Correct 579 ms 832 KB Output is correct
4 Correct 653 ms 33324 KB Output is correct
5 Correct 633 ms 30068 KB Output is correct
6 Correct 115 ms 656 KB Output is correct
7 Correct 724 ms 30216 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 522 ms 748 KB Output is correct
2 Correct 1 ms 656 KB Output is correct
3 Correct 480 ms 796 KB Output is correct
4 Correct 418 ms 760 KB Output is correct
5 Correct 550 ms 760 KB Output is correct
6 Correct 532 ms 804 KB Output is correct
7 Correct 598 ms 768 KB Output is correct
8 Correct 488 ms 804 KB Output is correct
9 Correct 429 ms 792 KB Output is correct
10 Correct 450 ms 788 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 238 ms 696 KB Output is correct
2 Correct 201 ms 664 KB Output is correct
3 Correct 282 ms 16008 KB Output is correct
4 Correct 210 ms 656 KB Output is correct
5 Correct 246 ms 12544 KB Output is correct
6 Correct 261 ms 656 KB Output is correct
7 Correct 262 ms 656 KB Output is correct
8 Correct 215 ms 744 KB Output is correct
9 Correct 356 ms 22820 KB Output is correct
10 Correct 340 ms 22960 KB Output is correct
11 Correct 422 ms 45344 KB Output is correct
12 Correct 371 ms 37716 KB Output is correct
13 Correct 227 ms 656 KB Output is correct
14 Correct 2 ms 656 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 238 ms 696 KB Output is correct
2 Correct 201 ms 664 KB Output is correct
3 Correct 282 ms 16008 KB Output is correct
4 Correct 210 ms 656 KB Output is correct
5 Correct 246 ms 12544 KB Output is correct
6 Correct 261 ms 656 KB Output is correct
7 Correct 262 ms 656 KB Output is correct
8 Correct 215 ms 744 KB Output is correct
9 Correct 356 ms 22820 KB Output is correct
10 Correct 340 ms 22960 KB Output is correct
11 Correct 422 ms 45344 KB Output is correct
12 Correct 371 ms 37716 KB Output is correct
13 Correct 227 ms 656 KB Output is correct
14 Correct 2 ms 656 KB Output is correct
15 Correct 203 ms 712 KB Output is correct
16 Correct 233 ms 656 KB Output is correct
17 Correct 251 ms 656 KB Output is correct
18 Correct 328 ms 12464 KB Output is correct
19 Correct 332 ms 656 KB Output is correct
20 Correct 321 ms 12760 KB Output is correct
21 Correct 247 ms 656 KB Output is correct
22 Correct 278 ms 760 KB Output is correct
23 Correct 425 ms 28048 KB Output is correct
24 Correct 467 ms 28044 KB Output is correct
25 Correct 554 ms 55300 KB Output is correct
26 Correct 389 ms 44544 KB Output is correct
27 Correct 244 ms 912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 238 ms 696 KB Output is correct
2 Correct 201 ms 664 KB Output is correct
3 Correct 282 ms 16008 KB Output is correct
4 Correct 210 ms 656 KB Output is correct
5 Correct 246 ms 12544 KB Output is correct
6 Correct 261 ms 656 KB Output is correct
7 Correct 262 ms 656 KB Output is correct
8 Correct 215 ms 744 KB Output is correct
9 Correct 356 ms 22820 KB Output is correct
10 Correct 340 ms 22960 KB Output is correct
11 Correct 422 ms 45344 KB Output is correct
12 Correct 371 ms 37716 KB Output is correct
13 Correct 227 ms 656 KB Output is correct
14 Correct 2 ms 656 KB Output is correct
15 Correct 203 ms 712 KB Output is correct
16 Correct 233 ms 656 KB Output is correct
17 Correct 251 ms 656 KB Output is correct
18 Correct 328 ms 12464 KB Output is correct
19 Correct 332 ms 656 KB Output is correct
20 Correct 321 ms 12760 KB Output is correct
21 Correct 247 ms 656 KB Output is correct
22 Correct 278 ms 760 KB Output is correct
23 Correct 425 ms 28048 KB Output is correct
24 Correct 467 ms 28044 KB Output is correct
25 Correct 554 ms 55300 KB Output is correct
26 Correct 389 ms 44544 KB Output is correct
27 Correct 244 ms 912 KB Output is correct
28 Correct 250 ms 724 KB Output is correct
29 Correct 414 ms 664 KB Output is correct
30 Correct 493 ms 29964 KB Output is correct
31 Correct 310 ms 664 KB Output is correct
32 Correct 435 ms 25480 KB Output is correct
33 Correct 292 ms 756 KB Output is correct
34 Correct 327 ms 912 KB Output is correct
35 Correct 377 ms 920 KB Output is correct
36 Correct 492 ms 30728 KB Output is correct
37 Correct 480 ms 30612 KB Output is correct
38 Correct 655 ms 60536 KB Output is correct
39 Correct 585 ms 53344 KB Output is correct
40 Correct 341 ms 912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 550 ms 788 KB Output is correct
2 Correct 2 ms 656 KB Output is correct
3 Correct 528 ms 796 KB Output is correct
4 Correct 541 ms 12656 KB Output is correct
5 Correct 34 ms 912 KB Output is correct
6 Correct 528 ms 2676 KB Output is correct
7 Correct 1 ms 656 KB Output is correct
8 Correct 441 ms 756 KB Output is correct
9 Correct 579 ms 832 KB Output is correct
10 Correct 653 ms 33324 KB Output is correct
11 Correct 633 ms 30068 KB Output is correct
12 Correct 115 ms 656 KB Output is correct
13 Correct 724 ms 30216 KB Output is correct
14 Correct 522 ms 748 KB Output is correct
15 Correct 1 ms 656 KB Output is correct
16 Correct 480 ms 796 KB Output is correct
17 Correct 418 ms 760 KB Output is correct
18 Correct 550 ms 760 KB Output is correct
19 Correct 532 ms 804 KB Output is correct
20 Correct 598 ms 768 KB Output is correct
21 Correct 488 ms 804 KB Output is correct
22 Correct 429 ms 792 KB Output is correct
23 Correct 450 ms 788 KB Output is correct
24 Correct 238 ms 696 KB Output is correct
25 Correct 201 ms 664 KB Output is correct
26 Correct 282 ms 16008 KB Output is correct
27 Correct 210 ms 656 KB Output is correct
28 Correct 246 ms 12544 KB Output is correct
29 Correct 261 ms 656 KB Output is correct
30 Correct 262 ms 656 KB Output is correct
31 Correct 215 ms 744 KB Output is correct
32 Correct 356 ms 22820 KB Output is correct
33 Correct 340 ms 22960 KB Output is correct
34 Correct 422 ms 45344 KB Output is correct
35 Correct 371 ms 37716 KB Output is correct
36 Correct 227 ms 656 KB Output is correct
37 Correct 2 ms 656 KB Output is correct
38 Correct 203 ms 712 KB Output is correct
39 Correct 233 ms 656 KB Output is correct
40 Correct 251 ms 656 KB Output is correct
41 Correct 328 ms 12464 KB Output is correct
42 Correct 332 ms 656 KB Output is correct
43 Correct 321 ms 12760 KB Output is correct
44 Correct 247 ms 656 KB Output is correct
45 Correct 278 ms 760 KB Output is correct
46 Correct 425 ms 28048 KB Output is correct
47 Correct 467 ms 28044 KB Output is correct
48 Correct 554 ms 55300 KB Output is correct
49 Correct 389 ms 44544 KB Output is correct
50 Correct 244 ms 912 KB Output is correct
51 Correct 250 ms 724 KB Output is correct
52 Correct 414 ms 664 KB Output is correct
53 Correct 493 ms 29964 KB Output is correct
54 Correct 310 ms 664 KB Output is correct
55 Correct 435 ms 25480 KB Output is correct
56 Correct 292 ms 756 KB Output is correct
57 Correct 327 ms 912 KB Output is correct
58 Correct 377 ms 920 KB Output is correct
59 Correct 492 ms 30728 KB Output is correct
60 Correct 480 ms 30612 KB Output is correct
61 Correct 655 ms 60536 KB Output is correct
62 Correct 585 ms 53344 KB Output is correct
63 Correct 341 ms 912 KB Output is correct
64 Correct 462 ms 988 KB Output is correct
65 Correct 675 ms 32400 KB Output is correct
66 Correct 717 ms 29060 KB Output is correct
67 Correct 440 ms 972 KB Output is correct
68 Correct 556 ms 988 KB Output is correct
69 Correct 781 ms 59584 KB Output is correct
70 Correct 728 ms 49928 KB Output is correct
71 Correct 448 ms 6060 KB Output is correct
72 Correct 506 ms 1172 KB Output is correct