Submission #1140851

#TimeUsernameProblemLanguageResultExecution timeMemory
1140851adiyerText editor (CEOI24_editor)C++20
5 / 100
4089 ms617240 KiB
#include <iostream> #include <vector> #include <map> #include <algorithm> #include <set> #define all(x) x.begin(), x.end() #define F first #define S second using namespace std; typedef long long ll; const int N = 4e6 + 11; const int mod = 1e9 + 7; const ll inf = 1e12 + 11; ll n, sx, sy, fx, fy, sz; ll l[N], dis[N], a[N], b[N], c[N], d[N]; vector < pair < ll, ll > > g[N]; map < pair < ll, ll >, ll > id; void dijkstra(ll s){ set < pair < ll, ll > > q; for(ll i = 0; i <= sz; i++) dis[i] = inf; dis[s] = 0, q.insert({dis[s], s}); while(!q.empty()){ ll v = (q.begin() -> S); q.erase(q.begin()); for(auto [u, w] : g[v]) if(dis[v] + w < dis[u]) q.erase({dis[u], u}), dis[u] = dis[v] + w, q.insert({dis[u], u}); } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> sx >> sy >> fx >> fy; for(ll i = 1; i <= n; i++) cin >> l[i], l[i]++; for(ll i = 1; i <= n; i++){ a[i] = 1, b[i] = min(l[i], sy), c[i] = min(l[i], fy), d[i] = l[i]; if(b[i] > c[i]) swap(b[i], c[i]); if(!id[{i, a[i]}]) id[{i, a[i]}] = ++sz; if(!id[{i, b[i]}]) id[{i, b[i]}] = ++sz; if(!id[{i, c[i]}]) id[{i, c[i]}] = ++sz; if(!id[{i, d[i]}]) id[{i, d[i]}] = ++sz; ll f1 = id[{i, a[i]}], f2 = id[{i, b[i]}], f3 = id[{i, c[i]}], f4 = id[{i, d[i]}]; if(f1 != f2) g[f1].push_back({f2, b[i] - a[i]}), g[f2].push_back({f1, b[i] - a[i]}); if(f2 != f3) g[f2].push_back({f3, c[i] - b[i]}), g[f3].push_back({f2, c[i] - b[i]}); if(f3 != f4) g[f3].push_back({f4, d[i] - c[i]}), g[f4].push_back({f3, d[i] - c[i]}); if(i > 1){ if(f1 != id[{i - 1, l[i - 1]}]){ g[f1].push_back({id[{i - 1, l[i - 1]}], 1}); g[id[{i - 1, l[i - 1]}]].push_back({f1, 1}); } } } for(ll i = 2; i <= n; i++){ g[id[{i - 1, a[i - 1]}]].push_back({id[{i, a[i]}], 1}); g[id[{i, a[i]}]].push_back({id[{i - 1, a[i - 1]}], 1}); g[id[{i, d[i]}]].push_back({id[{i - 1, min(d[i], d[i - 1])}], 1}); g[id[{i - 1, d[i - 1]}]].push_back({id[{i, min(d[i], d[i - 1])}], 1}); g[id[{i, c[i]}]].push_back({id[{i - 1, min(c[i], c[i - 1])}], 1}); g[id[{i - 1, c[i - 1]}]].push_back({id[{i, min(c[i], c[i - 1])}], 1}); g[id[{i, b[i]}]].push_back({id[{i - 1, min(b[i], b[i - 1])}], 1}); g[id[{i - 1, b[i - 1]}]].push_back({id[{i, min(b[i], b[i - 1])}], 1}); } // for(ll i = 1; i <= n; i++){ // cout << "text: "; // for(ll j = 1; j <= l[i]; j++){ // cout << id[{i, j}] << ' '; // } // cout << '\n'; // } // for(ll i = 1; i <= sz; i++){ // for(auto [j, w] : g[i]){ // cout << i << ' ' << j << ' ' << w << '\n'; // } // } dijkstra(id[{sx, sy}]); cout << dis[id[{fx, fy}]]; }
#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...