제출 #817808

#제출 시각아이디문제언어결과실행 시간메모리
817808BoomydayTracks in the Snow (BOI13_tracks)C++17
100 / 100
770 ms162588 KiB
// // Created by adavy on 1/31/2023. // // My Header #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using db = double; using str = string; // yay python! using ii = pair<int,int>; using pl = pair<ll,ll>; using pd = pair<db,db>; using vi = vector<int>; using vb = vector<bool>; using vl = vector<ll>; using vd = vector<db>; using vs = vector<str>; using vii = vector<ii>; using vpl = vector<pl>; using vpd = vector<pd>; #define tcT template<class T #define tcTU tcT, class U tcT> using V = vector<T>; tcT, size_t SZ> using AR = array<T,SZ>; tcT> using PR = pair<T,T>; // pairs #define mp make_pair #define f first #define s second #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define F0R(i,a) FOR(i,0,a) #define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i) #define R0F(i,a) ROF(i,0,a) #define trav(a,x) for (auto& a: x) #define len(x) int((x).size()) #define bg(x) begin(x) #define all(x) bg(x), end(x) #define rall(x) rbegin(x), rend(x) #define sor(x) sort(all(x)) #define rsz resize #define ins insert #define ft front() #define bk back() #define pb push_back #define eb emplace_back #define pf push_front const int MOD = 1e9+7; // 998244353; const int MX = 2e5+5; const ll INF = 1e18; // not too close to LLONG_MAX const ld PI = acos((ld)-1); const int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1}; // for every grid problem!! int main(){ // 0-1 bfs int H, W; cin >> H >> W; vector<vi> grid; F0R(i, H){ string row; cin >> row; vector<int> x; trav(c, row){ if (c=='R') x.pb(1); else if (c=='F') x.pb(-1); else x.pb(0); } grid.pb(x); } vector<vector<bool>> vis(H,vb(W,0)); vector<vector<int>> dist(H,vi(W)); deque<ii> q; q.push_back({0,0}); dist[0][0] = 1; // H, W vis[0][0] = 1; int ans = 1; while(q.size()){ auto [x, y] = q.front(); q.pop_front(); ans = max(ans, dist[x][y]); F0R(d, 4){ int nx = x+dx[d], ny = y+dy[d]; if(!(0<=nx && nx<H && 0<=ny && ny<W)) continue; if (vis[nx][ny]) continue; if (grid[nx][ny]==0) continue; vis[nx][ny] = 1; if (grid[nx][ny]==grid[x][y]){ q.push_front({nx,ny}); dist[nx][ny] = dist[x][y]; } else if (grid[nx][ny]==-grid[x][y]){ q.push_back({nx,ny}); dist[nx][ny] = dist[x][y]+1; } } } cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...