警钟敲烂
  • 板块灌水区
  • 楼主滑_稽
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/11/27 10:42
  • 上次更新2023/10/27 01:16:07
查看原帖
警钟敲烂
115485
滑_稽楼主2022/11/27 10:42

plant你们是多测不清空,我是直接忘了搞多测

#include<iostream>
#include<cstdio>
#define rep(i,x,n) for(int i=x;i<=n;i++)
using namespace std;

inline int Read(){
	int dat=0,f=1; char ch=getchar();
	while(ch<'0' || '9'<ch){ if(ch=='-') f=-f; ch=getchar(); }
	while('0'<=ch && ch<='9'){ dat=(dat<<3)+(dat<<1)+ch-'0'; ch=getchar(); }
	return dat*f;
}

void _write(int dat){
	if(dat/10) _write(dat/10);
	putchar('0'+dat%10);
}

void Write(int dat){
	if(dat<0){ putchar('-'); dat=-dat; }
	_write(dat);
}

const int maxN=1e3+5,mod=998244353;
int n,m,t,id,c,f;
long long dpc[maxN],add[maxN][maxN],ccfNB666[maxN][maxN],dpf[maxN],r[maxN][maxN],sum[maxN][maxN];
char s[maxN][maxN];
bool a[maxN][maxN],space[maxN][maxN];

int main(){
	//freopen("plant.in","r",stdin);
	//freopen("plant.out","w",stdout);
	t=Read(),id=Read();
	n=Read(),m=Read(),c=Read(),f=Read();
	for(int i=0;i<n;i++) scanf("%s",s[i]);
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			a[i+1][j+1]=s[i][j]=='1' ? 1 : 0;
	for(int cnt,j=1;j<=m;j++){//calculate space
		cnt=0;
		for(int i=1;i<=n;i++){
			if(!a[i][j]){
				cnt++;
				if(cnt>=3) space[i][j]=1;
			}
			else cnt=0;
		}
	}
	for(int cnt,i=1;i<=n;i++){//calculate r
		cnt=0;
		for(int j=m;j>=1;j--){
			if(a[i][j]) cnt=0;
			else{
				r[i][j]=cnt;
				cnt++;
			}
		}
	}
	for(int j=1;j<=m;j++){//calculate sum
		for(int i=1;i<=n;i++){
			if(a[i][j]) continue;
			sum[i][j]=(sum[i-1][j]+r[i][j])%mod;
		}
	}
	for(int i=1;i<=n;i++){
		if(i<3) continue;
		dpc[i]=dpc[i-1];
		for(int j=1;j<=m;j++){
			if(!space[i][j]) continue;
			dpc[i]=(dpc[i]+(add[i][j]=(sum[i-2][j]*r[i][j])%mod))%mod;
		}
	}
	for(int j=1;j<=m;j++)
		for(int i=1;i<=n;i++){
			if(!space[i][j]) continue;
			ccfNB666[i][j]=(ccfNB666[i-1][j]+add[i][j])%mod;
		}
	for(int i=1;i<=n;i++){
		if(i<4) continue;
		dpf[i]=dpf[i-1];
		for(int j=1;j<=m;j++){
			if(!space[i][j]) continue;
			dpf[i]=(dpf[i]+ccfNB666[i-1][j])%mod;
		}
	}
	Write(c*dpc[n]%mod); putchar(' '); Write(f*dpf[n]%mod);
	return 0;
}

100pts->0pts

把代码吊在这里警示后人:

当ccf给了你大数据,一定要检查是否覆盖到了题中给的所有数据范围,如果没有,一定要自己造一个能覆盖到所有范围的数据。

2022/11/27 10:42
加载中...