求调,样例全过但0分
查看原帖
求调,样例全过但0分
901863
Wind_and_wine楼主2023/8/4 22:43
#include<bits/stdc++.h>
using namespace std;
const int N=1001,MOD=998244353;
int a[N][N],rig[N][N],down[N][N];
int ansC,ansF;

int main(){
	int T,id; scanf("%d%d",&T,&id);
	for(int k=1;k<=T;k++){
		int n,m,c,f; scanf("%d%d%d%d",&n,&m,&c,&f);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++){
				char s; cin>>s;
				if(s=='0') a[i][j]=1;
				else a[i][j]=0;
			} 
		
		for(int i=n;i>=1;i--)
			for(int j=m;j>=1;j--)
				if(a[i][j]){
					down[i][j]=down[i+1][j]+1;
					rig[i][j]=rig[i][j+1]+1;
				}
		
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				if(rig[i][j]>=2&&down[i][j]>=3){  //不满足构成“C”的点直接跳过 
					int k=2; 
					while(a[i+k][j]){  
						ansC+=c*((rig[i][j]-1)*(rig[i+k][j]-1))%MOD;
						ansF+=f*((rig[i][j]-1)*(rig[i+k][j]-1)*(down[i+k][j]-1))%MOD;
						k++;
					}
				}
		printf("%d %d\n",(c*ansC)%MOD,(f*ansF)%MOD);
	}
	return 0;		
} 
2023/8/4 22:43
加载中...