PS
[C++] 선이 하나 더ㅠㅠ (백준 29727번)
jungh150c
2024. 6. 28. 02:09
https://www.acmicpc.net/problem/29727
#include <iostream>
using namespace std;
long long comb(int n, int r) {
if (r > n) return 0;
long long ans = 1;
for (int i = n; i > n - r; i--) {
ans *= i;
}
for (int i = r; i > 0; i--) {
ans /= i;
}
return ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, xa, ya, xb, yb;
cin >> n >> xa >> ya >> xb >> yb;
long long tans = comb(n + 1, 2);
long long ans = tans * tans;
if (xa == xb) {
if (ya > yb) {
int tmp = ya;
ya = yb;
yb = tmp;
}
if (ya < n && yb >= 0) {
if (ya < 0) ya = -1;
if (yb > n) yb = n;
ans += comb(yb - ya, 2) * (n + 1);
}
} else if (ya == yb) {
if (xa > xb) {
int tmp = xa;
xa = xb;
xb = tmp;
}
if (xa < n && xb >= 0) {
if (xa < 0) xa = -1;
if (xb > n) xb = n;
ans += comb(xb - xa, 2) * (n + 1);
}
}
cout << ans << '\n';
}
4C2 * 4C2 = 6 * 6 = 36
추가로 4C1 * 2C2 = 4 * 1 = 4
이런식으로 규칙을 찾아서 풀었다. 그런데 처음에 음수인 경우, 즉 그 격자 바깥에 점이 위치하는 경우를 생각하지 못해서 여러번 틀렸다.