关于小图灵
  • 板块灌水区
  • 楼主rmzls
  • 当前回复12
  • 已保存回复12
  • 发布时间2022/12/2 11:39
  • 上次更新2023/10/27 00:45:56
查看原帖
关于小图灵
261574
rmzls楼主2022/12/2 11:39

NOIP T1在洛谷上测得了100pts,但小图灵上只有54pts,感觉自己的算法也没有太大问题(?),一直想不明白(讨论区的注意事项都没出问题),不知道哪个分会更靠谱


还有就是我的代码如果能帮忙看看就更好了

#include<bits/stdc++.h>

#define int long long

using namespace std;

const int N=1e3+5,Mod=998244353;

int T,id,n,m,c1,f1,hx[N][N],sx[N][N],zqh[N][N],c[N][N],f[N][N],sumc,sumf;

int mod(int a){

	if(a>=Mod){

		a%=Mod;

	}

	return a;

}

char a[N][N];

signed main(){

//	freopen("plant.in","r",stdin);

//	freopen("plant.out","w",stdout);

	scanf("%d%d",&T,&id);

	while(T--){

		scanf("%d%d%d%d",&n,&m,&c1,&f1);

		for(int i=1;i<=n;i++){

			cin>>a[i]+1;

		} 

		for(int i=1;i<=n;i++){

			for(int j=m-1;j>=1;j--){

				if(a[i][j]=='1'||a[i][j+1]=='1'){

					hx[i][j]=0;

				}

				else{

					hx[i][j]=mod(hx[i][j+1]+1);

				}

				zqh[i][j]=hx[i][j];

			}

		}

		for(int i=n;i>=1;i--){

			for(int j=1;j<=m;j++){

				if(a[i][j]=='1'){

					sx[i][j]=0;

				}

				else{

					sx[i][j]=mod(sx[i+1][j]+1);

				}

			}

		}

		for(int i=1;i<=n;i++){

			for(int j=1;j<=m;j++){

				if(a[i][j]=='1'){

					zqh[i][j]=0;

				}

				else{

					zqh[i][j]=mod(zqh[i][j]+zqh[i-1][j]);

				}

			}

		}

		for(int i=2;i<=n;i++){

			for(int j=1;j<=m;j++){

				if(a[i-1][j]=='1'){

					c[i][j]=0;

				}

				else{

					c[i][j]=mod(hx[i][j]*zqh[i-2][j]);

					sumc=mod(sumc+c[i][j]);

				}

			}

		}

		for(int i=2;i<=n-1;i++){

			for(int j=1;j<=n;j++){

				f[i][j]=mod(c[i][j]*sx[i+1][j]);

				sumf=mod(sumf+f[i][j]);

			}

		}

		printf("%d %d\n",sumc*c1,sumf*f1);

		sumc=sumf=0;

		for(int i=1;i<=n;i++){

			for(int j=1;j<=m;j++){

				hx[i][j]=sx[i][j]=zqh[i][j]=c[i][j]=f[i][j]=0;

				a[i][j]='\0';

			}

		}

	} 

	return 0;

} 
2022/12/2 11:39
加载中...