社区讨论
救救孩子吧,诸位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 条回复,欢迎继续交流。
正在加载回复...