Submission #1199896

#TimeUsernameProblemLanguageResultExecution timeMemory
1199896JuanJLRailway Trip 2 (JOI22_ho_t4)C++20
0 / 100
2093 ms2232 KiB
#include <bits/stdc++.h>

#define fst first
#define snd second
#define forn(i,a,b) for(int i = a; i < b; i++)
#define mset(a,v) memset(a,v,sizeof(a))
#define FIN ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

using namespace std;
typedef long long ll;

const int MAXN = 300+5;

ll n,k,m;

ll a[MAXN];
ll b[MAXN];

bool inRange(ll p, ll a, ll b){
	if(a<b){ // iz a de
		if(a<=p && a+k>=p) return true;
	}else{
		if(a>=p && a-k<=p) return true;
	}
	return false;
}

ll next(ll p, ll a, ll b){
	if(a<b){ // iz a de
		if(p+1<=b) return p+1;
	}else{
		if(p-1>=b) return p-1;
	}
	return -1;
}

ll bfs( ll pini , ll pfin ){
	
	//[][] nd y linea
	bool vis[MAXN][MAXN]; mset(vis,false);
	ll dis[MAXN][MAXN];  mset(dis,-1);
	
	queue< pair< ll , pair<ll,ll> > > q;
	
	forn(i,0,m){
	
		if(inRange(pini,a[i],b[i])) q.push({1,{pini,i}});
		
	}
	
	while(!q.empty()){
		ll nd = q.front().snd.fst;
		ll line = q.front().snd.snd;
		ll cost = q.front().fst;
		
		q.pop();
		
		if(vis[nd][line]) continue;
		
		//cout<<nd<<" "<<line<<" "<<cost<<'\n';
		
		vis[nd][line]=true;
		dis[nd][line]=cost;
		
		if(next(nd,a[line],b[line])!=-1){
			q.push({(cost),{next(nd,a[line],b[line]),line}});
		}
		
		forn(i,0,m){
			if(inRange(nd,a[i],b[i])) q.push({(cost+1),{nd,i}});
		}
	}
	
	ll res = MAXN;
	forn(i,0,m){
		if(vis[pfin][i]){
			res=min(res,dis[pfin][i]);
		}
	}
	
	if(res==MAXN) return -1;
	
	return res;
}

int main(){ FIN;

	cin>>n>>k>>m; k--;
	
	forn(i,0,m) cin>>a[i]>>b[i];
	
	ll q; cin>>q;
	
	while(q--){
	
		ll ini,fin; cin>>ini>>fin;
		
		cout<<bfs(ini,fin)<<'\n';
		
	}

	return 0;	
}
#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...