이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define dbg(x) cerr << #x << ": " << x << endl;
const int MAX_N = 500 + 5;
string a[MAX_N];
bool can(int i, int j, int n, int m, const string& s) {
for (auto c : s) {
if (c == 'N') {
--i;
} else if (c == 'S') {
++i;
} else if (c == 'W') {
--j;
} else {
++j;
}
if (i < 0 || i >= n || j < 0 || j >= m || a[i][j] == '#') {
return false;
}
}
return true;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, m, t;
cin >> n >> m >> t;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
string s;
cin >> s;
reverse(s.begin(), s.end());
for (auto& c : s) {
if (c == 'N') {
c = 'S';
} else if (c == 'S') {
c = 'N';
} else if (c == 'W') {
c = 'E';
} else {
c = 'W';
}
}
int ans = 0;
// если уже есть какая-то последовательность команд, то все конечные позиции различны
// reverse the operations and check if there exists at least one starting position
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (a[i][j] == '#') continue;
if (can(i, j, n, m, s)) ++ans;
}
}
cout << ans << '\n';
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... |