社区讨论

救救孩子吧,诸位dalao们

P1902刺杀大使参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mi7ycc11
此快照首次捕获于
2025/11/21 05:37
4 个月前
此快照最后确认于
2025/11/21 05:37
4 个月前
查看原帖
第一次交一道题交了近20遍,仍然不知道这鬼畜的二分哪错了,求各位dalao帮忙看看。
CPP
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
//Mystery_Sky
//
#define M 1000
#define INF 0x7f7f7f7f
const int dx[] = {0, 0, 1, -1};
const int dy[] = {1, -1, 0, 0};
int l, r, mid;
bool vis[M][M], flag;
int n, m, a[M][M];
void check(int x, int y, int ans)
{
	if(x == n)	{
		flag = true;
	}
	for(int i = 0; i <= 3; i++) {
		int xx = x + dx[i];
		int yy = y + dy[i];
		if(xx <= 0 || yy <= 0 || xx > n || yy > m || a[xx][yy] > ans || vis[xx][yy]) continue;
		vis[xx][yy] = 1;
		check(xx, yy, ans);
		if(flag) return;
	}

}

int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= m; j++)
			scanf("%d", &a[i][j]), r = max(r, a[i][j]);
	l = 0;
	while(l <= r) {
		mid = (l+r)/2;
		memset(vis, 0, sizeof(vis));
		flag = 0;
		check(1, 1, mid);
		if(flag) r = mid - 1;
		else l = mid + 1;
	}
	printf("%d\n", l);
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...