社区讨论

WA60分求hack(简单一点的

P1514[NOIP 2010 提高组] 引水入城参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mllvt9jp
此快照首次捕获于
2026/02/14 13:34
5 天前
此快照最后确认于
2026/02/14 21:40
5 天前
查看原帖
代码:
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
// #define int __int128
// #define int unsigned long long
const int N = 510, M = 510;
struct interval {
	int l, r;
} dp[M]; // 写法是贪心不是dp
int a[N][M];
bool vis[N][M];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
int n, m, ans;
bool check (int x, int y) {
	if (x >= 1 && x <= n && y >= 1 && y <= m && !vis[x][y]) return true;
	return false; // else
}
void dfs (int x, int y) {
	if (vis[x][y]) return;
	vis[x][y] = true;
	for (int i = 0; i < 4; i++) {
		int fx = x + dx[i], fy = y + dy[i];
		if (check (fx, fy) && a[x][y] > a[fx][fy]) {
			dfs (fx, fy);
		}
	}
}
void dfs1 (int j, int x, int y) {
	if (vis[x][y]) return;
	vis[x][y] = true;
	for (int i = 0; i < 4; i++) {
		int fx = x + dx[i], fy = y + dy[i];
		if (check (fx, fy) && a[x][y] > a[fx][fy]) {
			dfs1 (j, fx, fy);
		}
	}
	if (x == n) {
		dp[j].l = min ({dp[j].l, y});
		dp[j].r = max ({dp[j].r, y});
		return;
	}
}
bool cmp (interval x, interval y) {
	if (x.l == y.l) return x.r > y.r;
	return x.l < y.l;
}
signed main () {
	ios::sync_with_stdio (false);
	cin.tie (0), cout.tie (0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> a[i][j];
		}
	}
	for (int j = 1; j <= m; j++) {
		dfs (1, j);
	}
	bool f = true;
	for (int j = 1; j <= m; j++) {
		if (!vis[n][j]) {
			f = false;
			++ ans;
		}
	}
	if (!f) {
		cout << "0" << "\n";
		cout << ans << "\n";
		return 0;
	}
	for (int j = 1; j <= m; j++) {
		memset (vis, 0, sizeof vis);
		dp[j] = {INT_MAX, INT_MIN};
		dfs1 (j, 1, j); 
	}
	sort (dp + 1, dp + 1 + m, cmp);
	int left, right = 1;
	for (int j = 1; j <= m; j++) {
		if (dp[j].l <= right + 1 && dp[j].r >= right + 1) { // 左端点在上一个右端点之内,合法
			left = dp[j].l;
			right = dp[j].r;
			++ ans;
		}
	}
	cout << "1" << "\n";
	cout << ans << "\n";
	return 0;
}

回复

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

正在加载回复...