80pts,求优化
查看原帖
80pts,求优化
530500
Andy2035楼主2023/7/25 17:20

subtask#0 #31 #32 T,求优化

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
const int N = 1010;
ll s[N][N],d[N][N];
char a[N][N];
ll n,m,p=998244353,c,f;
int main(){
	int T,id;cin>>T>>id;
	while(T--){
	cin>>n>>m>>c>>f;
	memset(s,0,sizeof s);
	memset(d,0,sizeof d);
	memset(a,0,sizeof a);
	for(int i = 1;i<=n;i++)
		for(int j = 1;j<=m;j++)cin>>a[i][j];
	for(int i = 1;i<=n;i++)
		for(int j = m;j>=1;j--){
			if(a[i][j]=='0'){
				s[i][j] = s[i][j+1] + 1;
			}
		}
	for(int j = 1;j<=m;j++)
		for(int i = n;i>=1;i--){
			if(a[i][j]=='0')d[i][j] = d[i+1][j] + 1;
		}
	ll ans1 = 0,ans2 = 0;
	for(int j = 1;j<=m;j++){
		for(int i = 1;i<=n;i++){
			if(a[i+1][j]=='1'||a[i][j]=='1')continue;
			for(int k = i+2;k<=n;k++){
				if(a[k][j]=='1')break;
				if(s[i][j]>1&&s[k][j]>1){
					ans1 += (s[i][j]-1)*(s[k][j]-1);
					if(d[k][j]>1)ans2+=(s[i][j]-1)*(s[k][j]-1)*(d[k][j]-1);
				}
			}
		}
	}
	cout<<(ans1*c)%p<<" "<<(ans2*f)%p<<endl;
	}
	return 0;
}
2023/7/25 17:20
加载中...