12分悬关求调
查看原帖
12分悬关求调
363995
QCurium楼主2023/9/9 15:45
#include<bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
const int N=1e3+10;
int t,id,n,m,c,f;
int pre[N][N],qia[N][N],qian[N][N],as[N][N];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>t>>id;
	while(t--){
		memset(pre,0,sizeof(pre));
		memset(qia,0,sizeof(qia));
		memset(qian,0,sizeof(qian));
		int ansc=0,ansf=0;
		cin>>n>>m>>c>>f;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				char c;
				cin>>c;
				as[i][j]=c-'0';
				pre[i][j]=0;
				qia[i][j]=0;
				qian[i][j]=0;
				if(i==1)
					qian[n+1][j]=-1;
			}
			pre[i][m+1]=-1;
		}
		for(int i=n;i>=1;i--){
			for(int j=m;j>=1;j--){
				pre[i][j]=pre[i][j+1]+1;
				qia[i][j]=qia[i+1][j]+pre[i][j];
				qian[i][j]=qian[i+1][j]+1;
				if(as[i][j]){
					pre[i][j]=-1;
					qia[i][j]=0;
					qian[i][j]=-1;
				}
			}
		}
		for(int i=1;i<=n-2;i++){
			for(int j=1;j<=m;j++){
				if(!as[i+1][j]&&!as[i][j]&&qian[i][j]>=2)
					ansc+=pre[i][j]*qia[i+2][j];
				ansc%=mod;
			}
		}
		for(int i=1;i<=n-3;i++){
			for(int j=1;j<=m;j++){
				if(!as[i+1][j]&&!as[i][j]&&qian[i][j]>=3)
					ansf+=(pre[i][j]*(qia[i+2][j]-qia[i+qian[i][j]][j]));
				ansf%=mod;
			}
		}
		cout<<(ansc*c)%mod<<" "<<(ansf*f)%mod<<'\n';
	}
	return 0;
}

提交记录

2023/9/9 15:45
加载中...