Submission #1137494

#TimeUsernameProblemLanguageResultExecution timeMemory
1137494ghammazhassanText editor (CEOI24_editor)C++20
30 / 100
533 ms325272 KiB
// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
using namespace std;
#define int long long
#define endl "\n";
const int N=2e5+5;
const int M=1e9+7;
void solve()
{
	int n,sl,sc,el,ec;
	cin >> n >> sl >> sc >> el >> ec;
	vector<int>ai(n);
	for (int i=0;i<n;i++){
		cin >> ai[i];
	}
	bool f=1;
	for (int i=0;i<n-2;i++){
		if (ai[i]!=ai[i+1]){
			f=0;
		}
	}
	if (f or n<=2){
		int c=abs(sl-el)+abs(sc-ec);
		if (el>1){
			c=min(c,abs(el-1-sl)+ec+ai[0]+1-sc);
		}
		if (el<n-1){
			c=min(c,abs(el+1-sl)+ai[0]+1-ec+sc);
		}
		c=min(c,2*n-sl-el+ec-1);
		c=min(c,2*n-sl-el+ai[0]+1-ec);
		cout << c << endl;
		return;
	}
	vector<int>p;
	int c=0;
	p.push_back(0);
	for (int i=0;i<n;i++){
		c+=ai[i]+1;
		p.push_back(c);
	}
	vector<vector<int>>a(p[n]+1);
	for (int i=0;i<n;i++){
		for (int j=1;j<=ai[i]+1;j++){
			if (i!=0 or j!=1){
				a[p[i]+j].push_back(p[i]+j-1);
			}
			if (i!=0){
				a[p[i]+j].push_back(min(p[i-1]+j,p[i]));
			}
			if (i!=n-1){
				a[p[i]+j].push_back(min(p[i+1]+j,p[i+2]));
				a[p[i]+j].push_back(p[i]+j+1);
			}
		}
	}
	int p1=p[sl-1]+sc;
	int p2=p[el-1]+ec;
	vector<int>vi(p[n]+1);
	vector<int>di(p[n]+1);
	queue<int>o;
	o.push(p1);
	vi[p1]=1;
	while(!o.empty()){
		int h=o.front();
		o.pop();
		for (int i:a[h]){
			if (!vi[i]){
				vi[i]=1;
				o.push(i);
				di[i]=di[h]+1;
			}
		}
	}
	cout << di[p2] << endl;
}		


signed main()
{

    ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE
    cin.tie(0), cout.tie(0);//DO NOT USE IN INTERACTIVE
    cout << fixed<<setprecision(9);
    int t=1;
    // cin >> t;
    for (int _=1;_<=t;_++){
    	solve();
    }
}
#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...