为什么我只 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;
}