제출 #1146095

#제출 시각아이디문제언어결과실행 시간메모리
1146095moaipoTracks in the Snow (BOI13_tracks)C++20
100 / 100
796 ms313724 KiB
#include <bits/stdc++.h> using namespace std; int n, m; vector<vector<int>> v; vector<pair<int,int>> mv = {{0,1},{0,-1},{1,0},{-1,0}}; int main(){ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); cin>>n>>m; v = vector<vector<int>> (n, vector<int>(m)); char c; for(int i=0;i<n;i++){ for (int j = 0; j < m; ++j) { cin>>c; if(c=='R') v[i][j] = 1; else if(c=='F') v[i][j] = -1; } } vector<pair<int,int>> nq (n*m); vector<pair<int,int>> q(n*m); // x, y q[0] = {0,0}; int maxi = 0; bool a = true; int i = 0; int sizq=1, siznq=0; while(true) { int ssiz = a ? sizq : siznq; if(i >= ssiz) break; for(;i<ssiz;i++) { auto cur = a ? q[i] : nq[i]; int x = cur.first, y = cur.second, r = v[y][x]; if(r==0) continue; if(abs(r)==2) r/=2; for(auto &cm : mv) { int nx = x + cm.first, ny = y + cm.second; if(nx<0 || ny<0 || nx>=m || ny>=n) continue; int nr = v[ny][nx]; if(nr == 0 || nr == 2 || nr == -2) continue; if(nr == -r) { if(a) { nq[siznq] = {nx, ny}; siznq++; } else { q[sizq] = {nx, ny}; sizq++; } } else if(nr == r) { if (a) { q[sizq] = {nx, ny}; sizq++; } else { nq[siznq] = {nx, ny}; siznq++; } ssiz++; } v[ny][nx] = 2*nr; } v[y][x] = 0; } if(a) { sizq = 0; i = 0; } else { siznq = 0; i = 0; } a = !a; maxi++; } cout<<maxi<<'\n'; } /* 5 8 FFR..... .FRRR... .FFFFF.. ..RRRFFR .....FFF */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...