Problem A 풀이 (C++)
문제 링크 : https://codeforces.com/contest/1547/problem/A
A에서 B의 위치는 2가지 경우가 있다.
1. 대각선 방향
2. 직선 방향
대각선 방향인 경우에는 장애물이 어디 있던 상관없이 | Ax - Bx | + | Ay - By |가 최단거리이다.
직선 방향인 경우에는 또 2가지 경우가 있다.
a. 장애물 F가 A와 B사이에 있는 경우
b. 장애물 F가 A와 B사이에 없는 경우
장애물이 A와 B사이에 있는 경우에는 장애물을 피해 최단거리를 구하면 된다.
결국 3가지 경우만 고려하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> using namespace std; int main() { int t; cin >> t; while (t--) { int ax, ay, bx, by, fx, fy; cin >> ax >> ay >> bx >> by >> fx >> fy; int length = 0; if (ax != bx && ay != by) { length = abs(ax - bx) + abs(ay - by); } else if (ax == bx) { length = abs(ay - by); if (ax == fx && ((ay < fy && fy < by) || (by < fy && fy < ay))) length += 2; } else if (ay == by) { length = abs(ax - bx); if (ay == fy && ((ax < fx && fx < bx) || (bx < fx && fx < ax))) length += 2; } cout << length << endl; } return 0; } | cs |

댓글
댓글 쓰기