0分求调!
查看原帖
0分求调!
759765
jinzihan0127楼主2024/1/15 13:06

(暴力+减枝):

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[105][105],sum=0,l[205][205],minn=0x3f;
bool z[105][105];
int cheak(int x,int y) {
	if(z[x][y])return -2;
	if(sum%(x*y)!=0)return -1;
	memset(l,0x3f,sizeof l);
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)l[i][j]=0;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++) {
			if(a[i][j]-l[i][j]!=0) {
				for(int o=i; o<=i+x-1; o++) {
					for(int p=j; p<=j+y-1; p++) {
						if(a[i][j]-l[i][j]==0)return -1;
					}
				}
			}
		}
	return sum/x/y;
}
signed main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)cin>>a[i][j],sum+=a[i][j];
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++) {
			int a=cheak(i,j);
			if(a==-1) {
				for(int o=2; o*i<=n; o++) {
					for(int p=1; p*j<=m; p++) {
						z[o*i][p*j]=true;
					}
				}
			} else if(a!=-2) minn=min(minn,a);
		}
	cout<<minn;
	return 0;
}
2024/1/15 13:06
加载中...