This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
const int MAX_R = 100; // Giới hạn kích thước tối đa của bản đồ
const int MAX_C = 100;
const int DIRS[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // N, E, S, W
int main() {
int R, C, M;
cin >> R >> C >> M;
vector<string> grid(R);
for (int i = 0; i < R; i++) {
cin >> grid[i];
}
string signals;
cin >> signals;
bitset<MAX_R * MAX_C> reachable; // Bitset để theo dõi các ô có thể đến
// Duyệt từng ô trong bản đồ để xem đâu là ô sàn có thể là vị trí bắt đầu
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
if (grid[r][c] == '.') {
bitset<MAX_R * MAX_C> current; // Tình trạng hiện tại cho ô bắt đầu
current.set(r * C + c); // Đánh dấu ô này là có thể đến
// Xử lý từng tín hiệu
for (char signal : signals) {
bitset<MAX_R * MAX_C> next; // Bitset cho ô tiếp theo
if (signal == '?') {
// Nếu là '?', thử tất cả 4 hướng
for (int dir = 0; dir < 4; dir++) {
for (int i = 0; i < MAX_R * MAX_C; i++) {
if (current[i]) {
int new_r = (i / C) + DIRS[dir][0];
int new_c = (i % C) + DIRS[dir][1];
if (new_r >= 0 && new_r < R && new_c >= 0 && new_c < C && grid[new_r][new_c] == '.') {
next.set(new_r * C + new_c);
}
}
}
}
} else {
// Nếu là hướng cụ thể
int dir = (signal == 'N') ? 0 : (signal == 'E') ? 1 : (signal == 'S') ? 2 : 3;
for (int i = 0; i < MAX_R * MAX_C; i++) {
if (current[i]) {
int new_r = (i / C) + DIRS[dir][0];
int new_c = (i % C) + DIRS[dir][1];
if (new_r >= 0 && new_r < R && new_c >= 0 && new_c < C && grid[new_r][new_c] == '.') {
next.set(new_r * C + new_c);
}
}
}
}
current = next; // Cập nhật trạng thái hiện tại
}
// Cập nhật reachable với các ô cuối cùng có thể đến
reachable |= current;
}
}
}
// Đếm số ô sàn có thể đến
int count = 0;
for (int i = 0; i < R * C; i++) {
if (reachable[i] && grid[i / C][i % C] == '.') {
count++;
}
}
cout << count << endl; // Xuất kết quả
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |