QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#360201 | #408. Dungeon 2 | user1234 | 0 | 0ms | 0kb | C++14 | 3.6kb | 2024-03-21 14:55:16 | 2024-03-21 14:55:17 |
answer
#include <bits/stdc++.h>
#include "dungeon2.h"
using namespace std;
// na co wskazuje i jakim numerem mozna sie tam dostac
short n;
//vector <pair <short, short>> sasiedzi[201];
short dokad_prowadzi[201][200];
short ile_korytarzy[201];
bool czy_w_gore[201][200];
short czym_wrocilismy[201][200];
bool czy_sasiad[201][200];
short ojcowie_numer[201];
// 1 to nieodwiedzony, 3 to odwiedzony i czesc drogi, 2 to odwiedzony i nie czesc drogi
short ktory_bit;
int odpowiedzi[201];
short zaglebienie[201];
void dfs_drzewowy() {
int kolor = n;
n++;
ile_korytarzy[kolor] = NumberOfRoads();
for (short i = 1; i <= ile_korytarzy[kolor]; i++) {
if (ojcowie_numer[kolor] == i) continue;
Move(i, 3);
int jak_wrocic = LastRoad();
if (Color() == 1) {
//sasiedzi[kolor].push_back({n, i});
czy_sasiad[kolor][i] = true;
ojcowie_numer[n] = jak_wrocic;
dokad_prowadzi[kolor][i] = n;
dokad_prowadzi[n][jak_wrocic] = kolor;
dfs_drzewowy();
Move(jak_wrocic, 2);
}
else if (Color() == 3) {
Move(jak_wrocic, 3);
czy_w_gore[kolor][i] = true;
czym_wrocilismy[kolor][i] = jak_wrocic;
}
else {
Move(jak_wrocic, 2);
}
}
}
// w systemie trojkowym, potega bedzie od 0 do 4
short jaki_bit_zapalony(short liczba, short potega) {
while (potega) {
potega--;
liczba /= 3;
}
return liczba % 3;
}
short potega3(short potega) {
if (potega == 0) return 1;
if (potega == 1) return 3;
if (potega == 2) return 9;
if (potega == 3) return 27;
return 81;
}
void dfs_krawedziowy(short v) {
short jaki_kolor = jaki_bit_zapalony(v, ktory_bit);
for (short i = 1; i <= ile_korytarzy[v]; i++) {
if (czy_sasiad[v][i]) {
Move(i, jaki_kolor);
dfs_krawedziowy(dokad_prowadzi[v][i]);
int c = Color();
Move(ojcowie_numer[dokad_prowadzi[v][i]], c);
}
else if (czy_w_gore[v][i]) {
Move(i, jaki_kolor);
dokad_prowadzi[v][i] += potega3(ktory_bit) * Color();
int l = LastRoad(), c = Color();
Move(l, c);
}
}
}
void zrob_dfsy_krawedziowe() {
dfs_krawedziowy(1);
ktory_bit++;
dfs_krawedziowy(1);
ktory_bit++;
dfs_krawedziowy(1);
ktory_bit++;
dfs_krawedziowy(1);
ktory_bit++;
dfs_krawedziowy(1);
}
void skonstuuj_reszte_krawedzi() {
for (short v = 1; v <= n; v++) {
for (short i = 1; i <= ile_korytarzy[v]; i++) {
if (czy_w_gore[v][i]) dokad_prowadzi[dokad_prowadzi[v][i]][czym_wrocilismy[v][i]] = v;
}
}
}
void bfs_szukajacy(short x) {
fill(zaglebienie + 1, zaglebienie + n + 1, -1);
queue <short> kolejka;
zaglebienie[x] = 0;
kolejka.push(x);
while (!kolejka.empty()) {
short v = kolejka.front();
kolejka.pop();
for (short i = 1; i <= ile_korytarzy[v]; i++) {
if (zaglebienie[dokad_prowadzi[v][i]] != -1) continue;
zaglebienie[dokad_prowadzi[v][i]] = zaglebienie[v] + 1;
odpowiedzi[zaglebienie[dokad_prowadzi[v][i]]]++;
kolejka.push(dokad_prowadzi[v][i]);
}
}
}
void zrob_bfsy_szukajace() {
for (short i = 1; i <= n; i++) {
bfs_szukajacy(i);
}
}
void Inspect(int R) {
n = 1;
dfs_drzewowy();
zrob_dfsy_krawedziowe();
skonstuuj_reszte_krawedzi();
zrob_bfsy_szukajace();
for (short i = 1; i <= R; i++) Answer(i, odpowiedzi[i] / 2);
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Runtime Error
Test #1:
score: 0
Runtime Error
input:
10 100 50 7 5 7 10 4 6 2 3 2 1 5 3 1 10 7 2 10 1 3 1 9 2 2 1 7 5 9 6 8 3 1 1 7 2 5 7 3 1 4 3 15 24 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
Wrong Answer [6]
result:
Subtask #2:
score: 0
Runtime Error
Test #16:
score: 0
Runtime Error
input:
10 3 50 4 7 4 10 5 2 8 6 1 10 2 1 9 3 1 7 10 2 7 2 5 6 1 5 8 9 3 7 9 2 4 10 8 7 4 4 1 9 5 3 15 19 9 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
Wrong Answer [6]
result:
Subtask #3:
score: 0
Runtime Error
Test #31:
score: 0
Runtime Error
input:
200 3 200 6 149 79 143 164 179 68 4 44 52 144 113 1 84 3 31 188 166 1 109 4 154 192 125 147 1 198 4 103 27 192 95 3 33 166 179 1 125 3 31 61 150 3 168 152 161 2 67 64 1 136 2 150 17 1 192 2 15 142 2 56 122 1 35 2 97 200 2 129 22 4 72 134 31 21 2 53 82 4 195 181 104 146 1 78 1 88 3 8 78 127 4 152 200...
output:
Wrong Answer [6]