Submission #708717

#TimeUsernameProblemLanguageResultExecution timeMemory
708717steamEngineTracks in the Snow (BOI13_tracks)C++17
100 / 100
1088 ms322620 KiB
//#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma") //#pragma GCC optimize("unroll-loops") #include "bits/stdc++.h" /* #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define node pair<int,int> #define ordered_set tree<node, null_type,less<node>, rb_tree_tag,tree_order_statistics_node_update> //order_of_key (k) : Number of items strictly smaller than k //find_by_order(k) : K-th element in a set (counting from zero) */ #define db1(x) cout<<#x<<"="<<x<<'\n' #define db2(x,y) cout<<#x<<"="<<x<<","<<#y<<"="<<y<<'\n' #define db3(x,y,z) cout<<#x<<"="<<x<<","<<#y<<"="<<y<<","<<#z<<"="<<z<<'\n' #define ff first #define endl '\n' #define ss second #define int long long #define pb push_back #define mp make_pair #define fr(i, s, e) for(int i = s; i < e; i++) #define rfr(i, s, e) for(int i = s; i >= e; i--) #define geta(a, n) for(int i = 0; i < n; i++) cin >> a[i]; #define pii pair<int,int> #define vi vector<int> #define mii map<int,int> #define pqb priority_queue<int> #define pqs priority_queue<int,vi,greater<int> > #define setbits(x) __builtin_popcountll(x) #define zrobits(x) __builtin_ctzll(x) #define inf 1e18 #define ps(x,y) fixed<<setprecision(y)<<x #define mk(arr,n,type) type *arr=new type[n]; #define all(x) x.begin(),x.end() #define MOD 1000000007 using namespace std; using ll = long long; int dx[] = { -1, 1, 0, 0}; int dy[] = {0, 0, 1, -1}; // int dx[]={2,2,-2,-2,1,1,-1,-1}; int dy[]={1,-1,1,-1,2,-2,2,-2}; /*------------------------------UNORDERED MAP HASH --------------------------------------------*/ //To make unordered_map unhackable // use it as unordered_map<int,int,custom_hash> mapp; /* struct custom_hash { static uint64_t splitmix64(uint64_t x) { // http://xorshift.di.unimi.it/splitmix64.c x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } }; */ /*------------------------------END--------------------------------------------*/ inline int powMod(int a, int b) { int x = 1; while (b > 0) { if (b & 1) x = (x * a) % MOD; a = (a * a) % MOD; b >>= 1; } return x; } inline int multiply(int x, int y) { return ((x % MOD) * (y % MOD)) % MOD; } inline int divide(int x, int y) { return ((x % MOD) * powMod(y % MOD, MOD - 2)) % MOD; } inline int ceil(int a, int b) { return (a + b - 1) / b; } int gcd (int a, int b) { while (b) { a %= b; swap(a, b); } return a; } int lcm (int a, int b) { return a / gcd(a, b) * b; } int inverseMod(int a, int m) { a = a % m; for (ll x = 1; x < m; x++) if ((a * x) % m == 1) return x; return -1; } #ifdef GAURAVDEBUG #include "C:\Users\gengi\OneDrive\Documents\debug.cpp" #else #define debug(...) "" #endif template<int D, typename T> struct vec : public vector < vec < D - 1, T >> { static_assert(D >= 1, "Vector dimension must be greater than zero!"); template<typename... Args> vec(int n = 0, Args... args) : vector < vec < D - 1, T >> (n, vec < D - 1, T > (args...)) { } }; template<typename T> struct vec<1, T> : public vector<T> { vec(int n = 0, T val = T()) : vector<T>(n, val) { }}; /* 5 8 FFR..... .FRRR... .FFFFF.. ..RRRFFR .....FFF */ int h,w; vector<string> mat; void solve() { cin >> h >> w; mat.resize(h); for (int i = 0; i < h; i++) { cin >> mat[i]; } deque<pii> dq; dq.push_front({0, 0}); int ans = 0; vector<vector<int>> dis(h, vector<int>(w, INT_MIN)); dis[0][0] = 1; auto inside = [&](int x, int y)->bool{ return x >= 0 and y >= 0 and x < h and y < w and mat[x][y] != '.'; }; vector<vector<bool>> vis(h, vector<bool>(w, false)); debug(mat); while (!dq.empty()) { auto p = dq.front(); dq.pop_front(); int i = p.ff; int j = p.ss; if (vis[i][j]) continue; vis[i][j] = true; ans=max(ans,dis[i][j]); // cout<<"i "<<" "<<j<<" "<<endl; for (int k = 0; k < 4; k++) { int x = i + dx[k]; int y = j + dy[k]; if (inside(x, y) and !vis[x][y]) { if (mat[x][y] == mat[i][j]) { dq.push_front({x,y}); dis[x][y]=dis[i][j]; } else { dq.push_back({x,y}); dis[x][y]=dis[i][j] + 1; } } } } cout<<ans; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifndef ONLINE_JUDGE //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); freopen("error.txt", "w", stderr); #endif int t = 1; // cin >> t; while (t--) solve(); return 0; }

Compilation message (stderr)

tracks.cpp: In function 'void solve()':
tracks.cpp:79:20: warning: statement has no effect [-Wunused-value]
   79 | #define debug(...) ""
      |                    ^~
tracks.cpp:108:5: note: in expansion of macro 'debug'
  108 |     debug(mat);
      |     ^~~~~
tracks.cpp: In function 'int32_t main()':
tracks.cpp:148:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  148 |     freopen("error.txt", "w", stderr);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...