mxqz 随机化
查看原帖
mxqz 随机化
675466
zzx0102楼主2023/7/12 18:27

为什么我只 srand(675466); 就会 WA on #4,然后多 srand(388651), srand(114514) 就过了?

90pts:

#include<bits/stdc++.h> 
using namespace std;
const int N = 1010;
int mp[N][N], a, b, n; bool vis[N][N]; int ans = INT_MAX;
int R(int l, int r) {return rand() % (r - l + 1) + l;}
int main() {
	ios::sync_with_stdio(0); srand(675466);
	cin >> a >> b >> n; for(int i = 1; i <= a; i++) for(int j = 1; j <= b; j++) cin >> mp[i][j];
	int T = 1000000;
	while(T--) {
		int p = R(n, a), q = R(n, b); if(vis[p][q]) continue;
		vis[p][q] = 1; int mx = 0, mi = 1e9;
		for(int i = p - n + 1; i <= p; i++) {
			for(int j = q - n + 1; j <= q; j++) {
				mx = max(mx, mp[i][j]);
				mi = min(mi, mp[i][j]);
                if(mx - mi > ans) break;
			}
            if(mx - mi > ans) break;
		}
		ans = min(ans, mx - mi);
	}
	cout << ans;
	return 0; 
}

AC 代码:

#include<bits/stdc++.h> 
using namespace std;
const int N = 1010;
int mp[N][N], a, b, n; bool vis[N][N]; int ans = INT_MAX;
int R(int l, int r) {return rand() % (r - l + 1) + l;}
int main() {
	ios::sync_with_stdio(0); srand(675466); srand(388651); srand(114514);
	cin >> a >> b >> n; for(int i = 1; i <= a; i++) for(int j = 1; j <= b; j++) cin >> mp[i][j];
	int T = 1000000;
	while(T--) {
		int p = R(n, a), q = R(n, b); if(vis[p][q]) continue;
		vis[p][q] = 1; int mx = 0, mi = 1e9;
		for(int i = p - n + 1; i <= p; i++) {
			for(int j = q - n + 1; j <= q; j++) {
				mx = max(mx, mp[i][j]);
				mi = min(mi, mp[i][j]);
                if(mx - mi > ans) break;
			}
            if(mx - mi > ans) break;
		}
		ans = min(ans, mx - mi);
	}
	cout << ans;
	return 0; 
}
2023/7/12 18:27
加载中...