탑이 n개있고 높이가 h로 동일하며 1<=a<=b<=h 인 a~b에서 자유롭게 인접한 탑을 오갈 수 있다고 할 때


특정 지점 두곳 사이의 최단거리를 출력하는 문제다.


#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <math.h>
#include <string.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

ll n, h, a, b, k;

int main() {
	ios::sync_with_stdio(false); cin.tie(0);
	cin >> n >> h >> a >> b >> k;
	while (k--) {
		ll ta, fa, tb, fb;
		cin >> ta >> fa >> tb >> fb;
		ll ans = 0;
		if (ta > tb) swap(ta, tb);
		if (fa > fb) swap(fa, fb);
		// tb>=ta
		// fb>=fa
		if (ta == tb) {
			ans = fb - fa;
		}
		else if (fb >= b) {
			if (fa >= b) {
				ans = fb - b + fa - b + tb - ta;
			}
			else {
				ans = fb - fa + tb - ta;
			}
		}
		else if (fb >= a) {
			ans = fb - fa + tb - ta;
		}
		else {
			ans = a - fb + a - fa + tb - ta;
		}
		cout << ans << '\n';
	}
	return 0;
}


'codeforces > #503 div2' 카테고리의 다른 글

B. Badge  (0) 2018.08.15

+ Recent posts