关于随机化的正确性
查看原帖
关于随机化的正确性
593299
Qerucy楼主2023/10/18 16:53

做法是随机找点去找以这个点为右上角顶点的正方形的最大值和最小值,感觉挺容易卡的,求hack。

代码:

#include<bits/stdc++.h> 
using namespace std;

mt19937 ran(19260817);

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 ran()%(r-l+1)+l;
}

int main(){
	ios::sync_with_stdio(0);
	cin>>a>>b>>n;
	for(int i=1;i<=a;i++)
		for(int j=1;j<=b;j++)
			cin>>mp[i][j];
	while(clock()<CLOCKS_PER_SEC*0.9){
		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/10/18 16:53
加载中...