求调 WA了3个点
  • 板块灌水区
  • 楼主cmh2667903441
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/8 08:35
  • 上次更新2023/11/8 10:01:27
查看原帖
求调 WA了3个点
187976
cmh2667903441楼主2023/11/8 08:35

题目P8865 [NOIP2022] 种花

#include<bits/stdc++.h>
using namespace std;
const int MS=1e3+3,p=998244353;
int T,id,n,m,c,f,a[MS][MS],sumx[MS][MS],sumy[MS][MS];
long long sumc,sumf;
char s[MS][MS];
int main(){
	scanf("%d%d",&T,&id);
	while(T--){
		sumc=0; sumf=0;
		memset(sumx,0,sizeof(sumx));
		memset(sumy,0,sizeof(sumy));
		scanf("%d%d%d%d",&n,&m,&c,&f);
		for(int i=1;i<=n;i++)
			scanf("%s",s[i]+1);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				if(s[i][j]=='0')a[i][j]=0;
				else a[i][j]=1;
		for(int i=1;i<=n;i++){
			int cnt=0;
			for(int j=m;j>=1;j--){
				if(a[i][j]==0)sumx[i][j]=cnt++;
				else sumx[i][j]=cnt=0;
			}
		}//表示(i,j)右方有几个空地 
		for(int j=1;j<=m;j++){
			int cnt=0;
			for(int i=n;i>=1;i--){
				if(a[i][j]==0)sumy[i][j]=cnt++;
				else sumy[i][j]=cnt=0;
			}
		}//表示(i,j)下方有几个空地 
		for(int j=1;j<=m;j++){
			long long cnt=0;
			for(int i=3;i<=n;i++){
				if(a[i][j]==1||a[i-1][j]==1||a[i-2][j]==1){
					cnt=0;
					continue;
				}
				cnt+=sumx[i-2][j];//若(i-2,j)为土坑 sumx[i-2][j]=0无影响 
				sumc=(sumc+cnt*sumx[i][j])%p;
				sumf=(sumf+cnt*sumx[i][j]*sumy[i][j])%p;
			}
		} 
		printf("%lld %lld\n",sumc%p,sumf%p);
	}
	return 0;
}

noip要废了 这么简单的题还调了好久QWQ

2023/11/8 08:35
加载中...