QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#359955#408. Dungeon 2user12340 0ms0kbC++143.6kb2024-03-21 05:50:182024-03-21 05:50:20

Judging History

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

  • [2024-03-21 05:50:20]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [2024-03-21 05:50:18]
  • 提交

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]);
            Move(ojcowie_numer[dokad_prowadzi[v][i]], Color());
        }
        else if (czy_w_gore[v][i]) {
            Move(i, jaki_kolor);
            dokad_prowadzi[v][i] += potega3(ktory_bit) * Color();
            Move(LastRoad(), Color());
        }
    }
}
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);
}

詳細信息

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]

result: