제출 #708130

#제출 시각아이디문제언어결과실행 시간메모리
708130tgp072Tracks in the Snow (BOI13_tracks)C++14
100 / 100
1142 ms210916 KiB
#include <iostream> #include <fstream> #include <algorithm> #include <vector> #include <stack> #include <queue> #include <math.h> #include <set> #include <map> #include <string> #include <tuple> #include <numeric> #include <climits> #include <bitset> #include <iomanip> #include <random> #include <ctime> using namespace std; typedef int ll; ll max(ll a, ll b) { if (a > b) { return a; } else { return b; } } ll min(ll a, ll b) { if (a < b) { return a; } else { return b; } } const ll MAXN = 4001; const ll MAXM = 2097153; const ll MOD = 1e9 + 7; const ll INF = 1e7; ll dr[4] = {0, 1, 0, -1}; ll dc[4] = {1, 0, -1, 0}; void solve(ll ca) { ll h, w; cin >> h >> w; char grid[h][w]; for (ll i = 0; i < h; i++) { for (ll j = 0; j < w; j++) { cin >> grid[i][j]; } } ll cheapest[h][w]; for (ll i = 0; i < h; i++) { for (ll j = 0; j < w; j++) { cheapest[i][j] = INF; } } deque<pair<ll, ll>> dq1; deque<ll> dq2; dq1.push_back({0, 0}); dq2.push_back(0); ll ans = 0; while (!dq1.empty()) { pair<ll, ll> cur = dq1.front(); ll cos = dq2.front(); dq1.pop_front(); dq2.pop_front(); if (cheapest[cur.first][cur.second] != INF) { continue; } ans = max(ans, cos); cheapest[cur.first][cur.second] = cos; for (ll k = 0; k < 4; k++) { ll nr = cur.first + dr[k]; ll nc = cur.second + dc[k]; if (nr >= 0 && nr < h && nc >= 0 && nc < w && cheapest[nr][nc] == INF && grid[nr][nc] != '.') { if (grid[nr][nc] == grid[cur.first][cur.second]) { dq1.push_front({nr, nc}); dq2.push_front(cos); } else { dq1.push_back({nr, nc}); dq2.push_back(cos+1); } } } } cout << ans+1 << endl; } int main() { mt19937 rng(0); // Fast IO ios::sync_with_stdio(false); cin.tie(nullptr); /* freopen("piggyback.in", "r", stdin); freopen("piggyback.out", "w", stdout); */ ll t = 1; //cin >> t; ll co = 0; while (t--) { solve(co); co++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...