help
  • 板块灌水区
  • 楼主absolute_value
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/9 21:51
  • 上次更新2023/11/9 22:01:50
查看原帖
help
1067907
absolute_value楼主2023/11/9 21:51
#include<bits/stdc++.h>
using namespace std;
int T=0,id=0,n=0,m=0,c=0,f=0,a[1001][1001][2]= {0},b[1001][1001][2]= {0};
long long ans1=0,ans2=0;
bool p[1001][1001]= {0};
int main() {
	scanf("%d %d",&T,&id);
	while(T--) {
		scanf("%d %d %d %d",&n,&m,&c,&f);
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				char c;
				cin>>c;
				p[i][j]=c-'0';
				a[i][j][0]=1-p[i][j];
				a[i][j][1]=1-p[i][j];
			}
		}
		for(int i=n-1; i>=0; i--) {
			for(int j=m-1; j>=0; j--) {
				if(p[i][j]==0) {
					if(j<m-1) a[i][j][0]+=a[i][j+1][0];
					if(i<n-1) a[i][j][1]+=a[i+1][j][1];
				}
			}
		}
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				b[i][j][0]=a[i][j][0]-1;
				b[i][j][1]=(a[i][j][0]-1)*(a[i][j][1]-1);
				if(i>0) {
					if(p[i][j]==0) {
						if(p[i-1][j]==0) {
							b[i][j][0]+=b[i-1][j][0];
							b[i][j][1]+=b[i-1][j][1];
						}
					} else b[i][j][0]=0,b[i][j][1]=0;
				}
			}
		}
		ans1=0;
		ans2=0;
		for(int i=0; i<n; i++) {
			for(int j=0; j<m; j++) {
				if(p[i][j]==1) continue;
				int next=min(i+a[i][j][1],n)-1;
				if(i+1<next) {
					if(c==1) ans1+=(a[i][j][0]-1)*(b[next][j][0]-b[i+1][j][0]),ans1%=998244353;
					if(f==1) ans2+=(a[i][j][0]-1)*(b[next][j][1]-b[i+1][j][1]),ans2%=998244353;
				}
			}
		}
		cout<<ans1*c<<' '<<ans2*f<<endl;
	}
	return 0;
}

https://www.luogu.com.cn/record/134222267

就错一个点

2023/11/9 21:51
加载中...