Submission #496372

#TimeUsernameProblemLanguageResultExecution timeMemory
496372IerusNautilus (BOI19_nautilus)C++17
29 / 100
376 ms262148 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},{1,0},{0,1},{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); } bool bfs(int x, int y, int d = k){ queue<tuple<int,int,int>> que; que.push({x, y, d}); // cerr << "BFS x: " << x << " y: " << y << " d: " << d << '\n'; while(!que.empty()){ tie(x, y, d) = que.front(); que.pop(); if(!d){ return true; } // cerr << "x: " << x << " y: " << y << " d: " << d << '\n'; 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{ 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}); } } } return false; } 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] = 1; if(r == 'S') q[i] = 0; if(r == 'E') q[i] = 3; if(r == 'W') q[i] = 2; } // cerr << "q: ";for(int i = 1; i <= k; ++i){ // if(q[i] == 0) cerr << "N"; // if(q[i] == 1) cerr << "S"; // if(q[i] == 2) cerr << "E"; // if(q[i] == 3) cerr << "W"; // if(q[i] == -1) cerr << "?"; // }cerr << '\n'; // cout << "res: "<< bfs(5, 9, k) << '\n'; int res = 0; for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j){ if(a[i][j] != '#'){ vis[i][j] = bfs(i, j, k); } } 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 cout << "x"; res += vis[i][j]; } } // cout << '\n'; } cout << res; };
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...