Submission #496340

#TimeUsernameProblemLanguageResultExecution timeMemory
496340IerusNautilus (BOI19_nautilus)C++17
0 / 100
9 ms332 KiB
#include<bits/stdc++.h> /* #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; */ using namespace std; #pragma GCC optimize ("unroll-loops,Ofast,O3") #pragma GCC target("avx,avx2,fma") #define F first #define int long long #define S second #define sz(x) (int)x.size() #define pb push_back #define eb emplace_back #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define NFS ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0) ; #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) //#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> typedef long long ll; const int E = 1e9; const long long inf = 1e18+777; const int N = 5555; const int MOD = 1e9+7; const bool I = 1; const vector<pair<int,int>> dxy = {{1,0},{0,1},{-1,0},{0,-1}}; int n, m, k, q[5555]; char a[555][555]; bool vis[555][555]; bool In(int x, int y){ return (x <= n && x >= 1 && y <= m && y >= 1); } void bfs(int x, int y, int d = 1){ queue<tuple<int,int,int>> que; que.push({x, y, d}); while(!que.empty()){ tie(x, y, d) = que.front(); que.pop(); // cerr << "x: " << x << " y: " << y << " d: " << d << '\n'; if(d == k + 1){ vis[x][y] = true; continue; } if(q[d] == -1){ for(auto [f, s] : dxy){ int x1 = x + f, y1 = y + s; if(In(x1, y1) && a[x1][y1] != '#'){ que.push({x1, y1, d+1}); } } }else if(q[d] >= 0){ int x1 = x + dxy[q[d]].F, y1 = y + dxy[q[d]].S; if(In(x1, y1) && a[x1][y1] != '#'){ que.push({x1, y1, d+1}); } } // cerr << "end: " << x << " " << y << '\n'; } } signed main(){ cin >> n >> m >> k; for(int i = 1; i <= n; ++i){ for(int j = 1; j <= m; ++j){ cin >> a[i][j]; } } for(int i = 1; i <= k; ++i){ char r; cin >> r; // if(r == '?') q[i] = -1; if(r == 'N') q[i] = 0; if(r == 'S') q[i] = 2; if(r == 'E') q[i] = 1; if(r == 'W') q[i] = 3; } // cerr << "q: ";for(int i = 1; i <= k; ++i){ // cerr << q[i] << ' '; // }cerr << '\n'; // q[k+1] = -2; int res = 0; for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j){ if(a[i][j] != '#'){ // cerr << "bfs("<<i<<","<<j<<")\n"; bfs(i, j, 1); } // exit(false); } for(int i = 1; i <= n; ++i){ for(int j = 1; j <= m; ++j){ if(a[i][j] == '#'){ // cout << "#"; }else{ // if(vis[i][j]) cerr << "o"; // else cerr << "x"; res += vis[i][j]; } } // cerr << '\n'; } cout << res; };
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...