对于每个蛋仔必然是先跑到与中心点横或纵坐标相同的行或列,再向中心点跑 不存在横向移动后又正向移动,在这过程中会使得横纵坐标越靠近坍塌边界,明显不符合题意,考虑以上做法,考虑单个蛋仔的坐标(x,y),如果先移动到横坐标相同的行,需要时间为abs(x-(n/2+1))此时边界靠近纵坐标 abs(x-(n/2+1)),此时再向中心点跑去,所需要满足的条件显然为abs(y-(m/2+1))+ abs(x-(n/2+1))< (m/2+1);同理另一种情况 则需满足abs(y-(m/2+1))+ abs(x-(n/2+1))< (n/2+1);二者满足其一即可,则蛋仔能逃脱的条件为abs(y-(m/2+1))+ abs(x-(n/2+1))< max((m/2+1),(n/2+1));则时间复杂度为o(k),ac代码如下
using namespace std;
#define int long long
void solve()
{
int n, m, k;
cin >> n >> m >> k;
int cnt = 0;
for (int i = 1; i <= k; i++)
{
int x, y;
cin >> x >> y;
int ax = abs(x - (n / 2 + 1));
int ay = abs(y - (m / 2 + 1));
if (ax + ay < max(m / 2 + 1, n / 2 + 1))
cnt++;
}
cout << cnt << '\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t = 1;
// cin >> t;
while (t--)
solve();
return 0;
}
完结撒花