求助!0pts!
查看原帖
求助!0pts!
751572
Jason_LiDongJin楼主2023/4/3 20:50

0pts

4个TLE,5个WA,6个 RTE……

STOSTO
orzorz\

思路:

所有格子 - 不是山丘的格子 = 答案

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int mp[705][705], cnt = 0;
int n, m;
bool vis[705][705], flag = 1;
int area = 0;

void dfs(int h, int x, int y) {
	if (x < 1 || y < 1 || y > n || y > n)
		return;
	if (vis[x][y])
		return;
	if (mp[x][y] != h) {
		if (mp[x][y] > h)
			flag = false;
		return;
	}
	vis[x][y] = 1;
	++area;
	dfs(h, x - 1, y + 1);
	dfs(h, x, y + 1);
	dfs(h, x + 1, y + 1);
	dfs(h, x + 1, y);
	dfs(h, x + 1, y - 1);
	dfs(h, x, y - 1);
	dfs(h, x - 1, y - 1);
	dfs(h, x - 1, y);
}

signed main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> mp[i][j];
		}
	}
	cnt = n * m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			area = 0, flag = 1;
			memset(vis, 0, sizeof(vis));
			dfs(mp[i][j], i, j);
			if (!flag) {
				cout << area << "\n";
				cnt -= area;
			}
		}
	}
	cout << cnt;
	return 0;
}
2023/4/3 20:50
加载中...