Submission #646100

#TimeUsernameProblemLanguageResultExecution timeMemory
646100dozerNautilus (BOI19_nautilus)C++14
66 / 100
26 ms1876 KiB
#include <bits/stdc++.h> using namespace std; #define fileio() freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout) #define fastio() cin.tie(0), ios_base::sync_with_stdio(0) #define sp " " #define endl "\n" #define pb push_back #define pii pair<int, int> #define st first #define nd second #define N 105 int arr[N][N], s[N], done[N][N]; int32_t main() { fastio(); pii dir[] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; map<char, int> val; val['N'] = 0, val['E'] = 1, val['S'] = 2, val['W'] = 3, val['?'] = 4; int r, c, m; cin>>r>>c>>m; vector<pii> curr; for (int i = 1; i <= r; i++) { for (int j = 1; j <= c; j++) { char tmp; cin>>tmp; if (tmp == '.') arr[i][j] = 1, curr.pb({i, j}); } } for (int i = 1; i <= m; i++) { char tmp; cin>>tmp; s[i] = val[tmp]; } for (int i = 1; i <= m; i++) { //cout<<curr.size()<<endl; vector<pii> tmp; for (auto j : curr) { int x = j.st, y = j.nd; int k = s[i]; if (k == 4) { for (auto l : dir) { int a = x + l.st, b = y + l.nd; if (arr[a][b] == 1 && done[a][b] < i + 1) { done[a][b] = i + 1; tmp.pb({a, b}); } } } else { pii l = dir[k]; int a = x + l.st, b = y + l.nd; if (arr[a][b] == 1 && done[a][b] < i + 1) { done[a][b] = i + 1; tmp.pb({a, b}); } } } curr = tmp; } cout<<curr.size()<<endl; cerr<<"time taken : "<<(float)clock() / CLOCKS_PER_SEC<<"seconds\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...