只对了第一个点求救
查看原帖
只对了第一个点求救
1788438
qushipaizhish1904楼主2025/8/2 12:27

测试样例全过,但是检查点只对了Subtask #1第一个(我猜这个是测试用例),代码有点乱,调试注释了 看了F题解思路自己写的C

#include<bits/stdc++.h>
using namespace std;
int n,m,c,f,T,id;
char a[1005][1005]; 
int h[1005][1005],s[1005][1005],s2[1005][1005],s3[1005][1005];
int main(){
	cin>>T>>id;
	for(int time__1239=0;time__1239<T;time__1239++){
		cin>>n>>m>>c>>f;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>a[i][j];
			}
		}
		for(int i=0;i<=n+1;i++){
			for(int j=m+1;j>=0;j--){
				h[i][j]=-1;
				s2[i][j]=-1;
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=m;j>=1;j--){
				if(a[i][j]=='1')h[i][j]=-1;
				else h[i][j]=1+h[i][j+1];
			}
		}
		for(int i=n;i>=1;i--){
			for(int j=1;j<=m;j++){
				if(h[i][j]==-1)s[i][j]=0;
				else s[i][j]=h[i][j]+s[i+1][j];
			}
		}
		for(int i=n;i>=1;i--){
			for(int j=1;j<=m;j++){
				if(a[i][j]=='1')s2[i][j]=-1;
				else s2[i][j]=1+s2[i+1][j];
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(h[i][j]==-1)s3[i][j]=0;
				else s3[i][j]=h[i][j]+s3[i-1][j];
			}
		}
		long long sum=0;
		/*
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<a[i][j];
			}cout<<endl;
		}
		cout<<endl;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<h[i][j];
			}cout<<endl;
		}cout<<endl;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<s[i][j];
			}cout<<endl;
		}cout<<endl;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<s2[i][j];
			}cout<<endl;
		}cout<<endl;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<s3[i][j];
			}cout<<endl;
		}cout<<endl;
		*/
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(h[i][j]<1 || s[i+2][j]<1||a[i+1][j]=='1'){//cout<<"  "<<0;
				continue;}
				sum+=h[i][j]*s[i+2][j];
				sum%=998244353;
				//cout<<setw(3)<<setfill(' ')<<h[i][j]*s[i+2][j];
			}//cout<<endl;
		}
		cout<<sum*c<<' '/*<<endl*/;
		sum=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(s2[i][j]<1 || s3[i-2][j]<1 || h[i][j]<1||a[i-1][j]=='1'){//cout<<"  "<<0;
				continue;}
				sum+=h[i][j]*s3[i-2][j]*s2[i][j];
				sum%=998244353;
				//cout<<setw(3)<<setfill(' ')<< h[i][j]*s3[i-2][j]*s2[i][j];
				
			}//cout<<endl;
		}
		cout<<sum*f;
	
	
	
	
		
	}
	
	
}
2025/8/2 12:27
加载中...