求助wa 61
查看原帖
求助wa 61
133116
Xhesika_Frost楼主2021/10/1 07:54
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#define lll long long
using namespace std;
int sum[500][500];
int t;
int n,m;
int ans[10001];
string s[10001];
int res;
int cal(int x,int y,int xx,int yy){
	return sum[xx][yy]+sum[x-1][y-1]-sum[xx][y-1]-sum[x-1][yy];
}
int main(){
	cin>>t;
	while(t--){
		res=9999999999;
		cin>>n>>m;
		for(int i=1;i<=n;++i){
			cin>>s[i];
		}
		for(int i=1;i<=n;++i){
			for(int j=1;j<=m;++j){
				sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+(s[i][j-1]-'0');
			}
		}
	//	for(int i=1;i<=n;++i){
	//		for(int j=1;j<=m;++j){
		//		sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+(s[i][j-1]-'0');
	//			cout<<sum[i][j]<<" ";
	//		}
	//		cout<<endl;
	//	}
		for(int i=1;i+4<=n;++i){
			for(int j=1;j+3<=m;++j){
				int fff=9999999;
				for(int z=i+4;z<=n;++z){
					for(int k=j+3;k<=m&&k<=fff+2;++k){
						int ans=cal(i,j,z,k);
						int aa=cal(i+1,j+1,z-1,k-1);
					//	cout<<"s"<<ans<<endl;
						if(aa>res){
							fff=k;
							break;
						}
						int aaa=(s[i][j-1]-'0')+s[i][k-1]-'0'+s[z][j-1]-'0'+s[z][k-1]-'0';
						int tem=aa+(z-i-1)*2+(k-j-1)*2-(ans-aa-aaa);
						if(tem-((k-j-1)-cal(i+1,k,z-1,k))>res){
							break;
						}
					//	cout<<tem<<endl;
						res=min(res,tem);
					}
				}
			}
		}
		cout<<res<<endl;
	}
	return 0;
}

	

2021/10/1 07:54
加载中...