Submission #632619

#TimeUsernameProblemLanguageResultExecution timeMemory
632619VasLemmyTracks in the Snow (BOI13_tracks)C++17
100 / 100
600 ms169152 KiB
#include<bits/stdc++.h> //#define int long long #define pii pair<int,ll> #define fi first #define se second /*#pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") #pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma")*/ using namespace std; using ll = long long; using ull = unsigned long long; using ldb = long double; const ll N = (int)1e6; const int maxN = (int)3e5 + 5; const int mod = 1e9 + 7; //const int mod = 998244353; const ll infty = 1e18 + 7; const int base = (int)4e5; const int Block_size = 350; void InputFile() { //freopen("threesum.in","r",stdin); //freopen("threesum.out","w",stdout); //freopen("test.out","r",stdin); } void FastInput() { ios_base::sync_with_stdio(false); cin.tie(nullptr); } int n,m; char a[4005][4005]; int dp[4005][4005]; void Read() { cin >> m >> n; for(int i = 1; i <= m; i++) { for(int j = 1; j <= n; j++) { cin >> a[i][j]; //dp[i][j] = mod; } } deque<pii> q; dp[1][1] = 1; q.push_back({1,1}); int res = 0; do { pii u = q.front(); res = max(res,dp[u.fi][u.se]); q.pop_front(); pii v = {u.fi,u.se+1}; if(v.se <= n && a[v.fi][v.se] != '.') { if(!dp[v.fi][v.se]) { dp[v.fi][v.se] = dp[u.fi][u.se] + (a[u.fi][u.se] != a[v.fi][v.se]); if(a[u.fi][u.se] != a[v.fi][v.se]) q.push_back(v); else q.push_front(v); } } v = {u.fi+1,u.se}; if(v.fi <= m && a[v.fi][v.se] != '.') { if(!dp[v.fi][v.se]) { dp[v.fi][v.se] = dp[u.fi][u.se] + (a[u.fi][u.se] != a[v.fi][v.se]); if(a[u.fi][u.se] != a[v.fi][v.se]) q.push_back(v); else q.push_front(v); } } v = {u.fi-1,u.se}; if(v.fi >= 1 && a[v.fi][v.se] != '.') { if(!dp[v.fi][v.se]) { dp[v.fi][v.se] = dp[u.fi][u.se] + (a[u.fi][u.se] != a[v.fi][v.se]); if(a[u.fi][u.se] != a[v.fi][v.se]) q.push_back(v); else q.push_front(v); } } v = {u.fi,u.se-1}; if(v.se >= 1 && a[v.fi][v.se] != '.') { if(!dp[v.fi][v.se]) { dp[v.fi][v.se] = dp[u.fi][u.se] + (a[u.fi][u.se] != a[v.fi][v.se]); if(a[u.fi][u.se] != a[v.fi][v.se]) q.push_back(v); else q.push_front(v); } } } while(!q.empty()); cout << res; /*for(int i = 1;i <= m;i++) { for(int j = 1;j <= n;j++) { cout << dp[i][j] <<' '; } cout <<'\n'; }*/ } void Solve() { } void Debug() { } int32_t main() { FastInput(); //InputFile(); //int sub_type; //cin >> sub_type; //Sieve() int test; //cin >> test; test = 1; while(test--) { Read(); Solve(); //Debug(); } } //// ///// //////
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...