60pts求助
查看原帖
60pts求助
1059675
fyc_LC楼主2024/12/2 21:50
#include<bits/stdc++.h>
using namespace std;
bool d[1090][1090];
long long gx[1090][1090];
long long gx2[1090][1090]; 
long long anc,anf;
const long long N=98244353,o=0;
void qk(){
	memset(d,0,sizeof(d));
	memset(gx,0,sizeof(gx));
	memset(gx2,0,sizeof(gx2));
	anc=anf=0;
}
int main(){
	int t,id;
	cin>>t>>id;
	int n,m,c,f;
	char tmp;
	while(t--){
		qk();
		cin>>n>>m>>c>>f;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>tmp;
				d[i][j]=tmp-'0';
			}
		}
		for(int i=n;i>=1;i--){
			for(int j=m;j>=1;j--){ 
				if(d[i][j]==1){
					gx[i][j]=-1;
				}
				else if(j==m){
					gx[i][j]=0;
				}
				else{
					gx[i][j]=gx[i][j+1]+1;
				}
			}
		}
		for(int i=n;i>=1;i--){
			for(int j=m;j>=1;j--){ 
				if(d[i][j]==1){
					gx2[i][j]=-1;
				}
				else if(i==n){
					gx2[i][j]=0;
				}
				
				else{
					gx2[i][j]=gx2[i+1][j]+1;
				}
			}
		}
		long long cnt=0;
		for(int j=1;j<=m;j++){
			cnt=0;
			for(int i=1;i<=n;i++){
				if(d[i][j]==1){
					cnt=0;
					continue;
				} 
				anc+=(cnt*gx[i][j])%N;
				anc%=N;
				anf+=max(o,((cnt*gx[i][j])*gx2[i][j]))%N;
				anf%=N;
				cnt+=max(gx[i-1][j],o);
			}
		}
		cout<<anc*c<<" "<<anf*f<<endl;
 	}
	return 0;
}

真的不知道错哪了

2024/12/2 21:50
加载中...