Submission #1046856

#TimeUsernameProblemLanguageResultExecution timeMemory
10468561L1YAMaze (JOI23_ho_t3)C++17
100 / 100
380 ms479892 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") // Ofast, O0, O1, O2, O3, unroll-loops, fast-math, trapv typedef long long ll; typedef pair<ll, ll> pll; typedef pair<int, int> pii; #define Mp make_pair #define sep ' ' #define endl '\n' #define F first #define S second #define pb push_back #define all(x) (x).begin(),(x).end() #define kill(res) cout << res << '\n', exit(0); #define set_dec(x) cout << fixed << setprecision(x); #define fast_io ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("input.txt", "r", stdin) ; freopen("output.txt", "w", stdout); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const ll N = 6e6 + 50; const ll Mod = 1e9 + 7; int R, C, n; pii s, t; string a[N]; struct cst{ int F = Mod, S, T; }; vector<cst> cost[N]; bool ok(int x, int y){ return (0 <= min(x, y) && x < R && y < C); } int main(){ fast_io; cin >> R >> C >> n >> s.F >> s.S >> t.F >> t.S; s.F--; s.S--; t.F--; t.S--; n--; n = -n; for(int i = 0; i < R; i++) cin >> a[i]; for(int i = 0; i < R; i++) cost[i].resize(C); vector<pii> q0, q1; q0.pb({s.F, s.S}); cost[s.F][s.S] = {0, 0, 0}; while(!q0.empty()){ for(int i = 0; i < q0.size(); i++){ auto [r, c] = q0[i]; auto [x, y, z] = cost[r][c]; if(y != 0){ if(ok(r+1, c) && x < cost[r+1][c].F){ cost[r+1][c] = {x, y+1, z}; q0.pb({r+1, c}); } if(ok(r-1, c) && x < cost[r-1][c].F){ cost[r-1][c] = {x, y+1, z}; q0.pb({r-1, c}); } } } for(int i = 0; i < q0.size(); i++){ auto [r, c] = q0[i]; auto [x, y, z] = cost[r][c]; if(z != 0){ if(ok(r, c+1) && x < cost[r][c+1].F){ cost[r][c+1] = {x, y, z+1}; q0.pb({r, c+1}); } if(ok(r, c-1) && x < cost[r][c-1].F){ cost[r][c-1] = {x, y, z+1}; q0.pb({r, c-1}); } } } for(int i = 0; i < q0.size(); i++){ auto [r, c] = q0[i]; auto [x, y, z] = cost[r][c]; if(ok(r+1, c)){ if(a[r+1][c] == '#'){ if(cost[r+1][c].F > x+1){ cost[r+1][c] = {x+1, n, n}; q1.pb({r+1, c}); } } else{ if(cost[r+1][c].F > x){ cost[r+1][c] = {x, 0, 0}; q0.pb({r+1, c}); } } } if(ok(r-1, c)){ if(a[r-1][c] == '#'){ if(cost[r-1][c].F > x+1){ cost[r-1][c] = {x+1, n, n}; q1.pb({r-1, c}); } } else{ if(cost[r-1][c].F > x){ cost[r-1][c] = {x, 0, 0}; q0.pb({r-1, c}); } } } if(ok(r, c+1)){ if(a[r][c+1] == '#'){ if(cost[r][c+1].F > x+1){ cost[r][c+1] = {x+1, n, n}; q1.pb({r, c+1}); } } else{ if(cost[r][c+1].F > x){ cost[r][c+1] = {x, 0, 0}; q0.pb({r, c+1}); } } } if(ok(r, c-1)){ if(a[r][c-1] == '#'){ if(cost[r][c-1].F > x+1){ cost[r][c-1] = {x+1, n, n}; q1.pb({r, c-1}); } } else{ if(cost[r][c-1].F > x){ cost[r][c-1] = {x, 0, 0}; q0.pb({r, c-1}); } } } } q0.clear(); swap(q0, q1); } cout << cost[t.F][t.S].F; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:59:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |         for(int i = 0; i < q0.size(); i++){
      |                        ~~^~~~~~~~~~~
Main.cpp:73:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |         for(int i = 0; i < q0.size(); i++){
      |                        ~~^~~~~~~~~~~
Main.cpp:87:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |         for(int i = 0; i < q0.size(); i++){
      |                        ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...