WA+AC+RE求调教
查看原帖
WA+AC+RE求调教
651908
8NewOC楼主2023/10/10 22:35

sub0:65pts,sub1:20pts,求问那组是ccf数据

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
inline int read(){
	int ret=0,f=0; char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=1; ch=getchar();}
	while(isdigit(ch)) ret=(ret<<1)+(ret<<3)+(ch^48),ch=getchar();
	return f?-ret:ret;
}
struct kkk{
	int r[1001],d[1001];
}num[1001];
bool pl[1001][1001];
long long ansc,ansf;
int n,m,c,f;
void dfsc(int i,int x,int y){
	for(int k=x;k<=n;k++){
		if(pl[k][y]==1){
			return ;
		}
		ansc+=num[i].r[y]*num[k].r[y];
		ansc%=mod;
	}
}
void dfsf(int i,int x,int y){
	for(int k=x;k<=n;k++){
		if(pl[k][y]==1){
			return ;
		}
		ansf+=num[i].r[y]*num[k].r[y]*num[k].d[y];
		ansf%=mod;
	}
}
int main(){
//	freopen("test4.in","r",stdin);
//	freopen("test4.out","w",stdout);
	int t,id;
	t=read(),id=read();
	while(t--){
		n=read(),m=read(),c=read(),f=read();
		ansc=0,ansf=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				char c;
				cin>>c;
				if(c-'0'==0){
					pl[i][j]=false;
				}
				else{
					pl[i][j]=true;
				}
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=m;j>=1;j--){
				if(pl[i][j]==0){
					num[i].r[j]=num[i].r[j+1]+1;
				}
				else{
					num[i].r[j]=0;
				}
			}
		}
		for(int i=1;i<=m;i++){
			for(int j=n;j>=1;j--){
				if(pl[j][i]==0){
					num[j].d[i]=num[j+1].d[i]+1;
				}
				else{
					num[j].d[i]=0;
				}
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				num[i].r[j]--;
				num[i].r[j]=max(0,num[i].r[j]);
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				num[i].d[j]--;
				num[i].d[j]=max(0,num[i].d[j]);
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(pl[i+1][j]==0){
					dfsc(i,i+2,j);
				}
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(pl[i+1][j]==0){
					dfsf(i,i+2,j);
				}
			}
		}
		cout<<c*ansc%mod<<" "<<f*ansf%mod<<endl;
	}
	return 0;
}
2023/10/10 22:35
加载中...