炸弹人是一个非常经典的小游戏,游戏在一个 n 行 m 列的网格盘内进行,炸弹人可以在任何一个方格内放置炸弹,炸弹爆炸的威力可以向 8 个方向(上、下、左、右、左上、右上、左下、右下)延伸,直至到达边界为止。如图8-4所示,在(3,4)位置上放置炸弹,其威力能覆盖18个方格。

对于一个 n 行 m 列的网格盘,将炸弹放到 p行 q列的位置,编写程序,计算并输出炸弹威力能覆盖的方格数量。
然后希望 O(1) 解,脑子乱了。
#include <bits/stdc++.h>
using namespace std;
int n, m, p, q, ans;
int main() {
cin >> n >> m >> p >> q;
ans = 1;
ans += (p - 1);
ans += (n - p);
ans += (q - 1);
ans += (n - q);
ans += min(p - 1, q - 1);
ans += min(n - p, n - q);
ans += min(n - p, q - 1);
ans += min(n - p, n - q);
cout << ans;
return 0;
}
求助!