为什么99分
查看原帖
为什么99分
489327
小熙熙楼主2023/11/16 10:39
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#define ll long long
#define bug cout<<"bug"<<"\n"
#define mk make_pair
#define fi first
#define se second
#define pii pair<ll,ll>
#define fo(i,a,b) for(ll i=a;i<=b;i++)
#define rfo(i,a,b) for(ll i=a;i>=b;i--)
#define ls (p<<1)
#define rs (p<<1|1)
using namespace std;
const ll maxn=1000+100;
const ll inf=0x3f3f3f3f;
const double eps=1e-9;
const ll mod=998244353;
inline ll rd(){ll x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
ll T,id;
ll n,m,c,f;
char a[maxn][maxn];
ll suml[maxn][maxn],sumup[maxn][maxn],sumd[maxn][maxn],sums[maxn][maxn];
int main(){
	T=rd(),id=rd();
	while(T--){
		n=rd(),m=rd(),c=rd(),f=rd();
		if(c==0&&f==0){cout<<"0 0"<<"\n";continue;}
		memset(suml,0,sizeof(suml));
		memset(sumup,0,sizeof(sumup));
		memset(sumd,0,sizeof(sumd));
		memset(sums,0,sizeof(sums));
		for(ll i=1;i<=n;i++)
			for(ll j=1;j<=m;j++)
				cin>>a[i][j];
		for(ll i=1;i<=n;i++)
			for(ll j=m;j>=1;j--)
				if(a[i][j]=='0') suml[i][j]=suml[i][j+1]+1;
		for(ll j=1;j<=m;j++)
			for(ll i=1;i<=n;i++)
				if(a[i][j]=='0') sums[i][j]=sums[i-1][j]+1;
		for(ll j=1;j<=m;j++)
			for(ll i=1;i<=n;i++)
				if(a[i][j]=='0') sumup[i][j]=(sumup[i-1][j]+suml[i][j]-1)%mod;
		for(ll j=1;j<=m;j++)
			for(ll i=n;i>=1;i--)
				if(a[i][j]=='0') sumd[i][j]=sumd[i+1][j]+1;
		ll sumc=0,sumf=0;
		for(ll j=1;j<=m;j++){
			for(ll i=3;i<=n;i++){
				if(a[i][j]=='1') continue;
				ll p=sums[i][j];
				p--;
				if(p<2) continue;
				ll t=sumup[i-2][j];
				sumc+=t*(suml[i][j]-1)%mod;
				sumc%=mod;
			//	cout<<sumc<<"  "<<i<<"  "<<j<<"  "<<t<<"  "<<p<<"\n";
			}
		}
		for(ll j=1;j<=m;j++){
			for(ll i=3;i<=n;i++){
				if(a[i][j]=='1') continue;
				ll p=sums[i][j];
				p--;
				if(p<2) continue;
				ll t=sumup[i-2][j];
				sumf+=t*(suml[i][j]-1)%mod*(sumd[i+1][j])%mod;
				sumf%=mod;
			}
		}
		cout<<sumc*c<<" "<<sumf*f<<"\n";
	}
	return 0;
}

RE了一分

2023/11/16 10:39
加载中...