NOIP T1样例全过求助
  • 板块灌水区
  • 楼主qip101
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/12/13 14:57
  • 上次更新2023/10/24 07:48:19
查看原帖
NOIP T1样例全过求助
333800
qip101楼主2022/12/13 14:57
#include <bits/stdc++.h>
#define MAXN 5005
#define MOD 998244353
using namespace std;
int T,id,n,m,c,f;
long long a[MAXN][MAXN],sum[MAXN][MAXN],Sum[MAXN][MAXN];
int main()
{
//	freopen("plant.in","r",stdin);
//	freopen("plant.out","w",stdout);
	cin >> T >> id;
	while(T--)
	{
		memset(sum,0,sizeof(sum));
		memset(Sum,0,sizeof(Sum));
		long long ans_c=0,ans_f=0;
		cin >> n >> m >> c >> f; 
		if(c==0 && f==0)
		{
			cout << "0" << " " << "0";
			return 0;
		}
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
			{
				char c;
				cin >> c;
				if(c=='1')
					a[i][j]=1;
				else
					a[i][j]=0;
			}
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				for(int k=j+1;k<=m;k++)
				{
					if(a[i][k]==0)	
						sum[i][j]++;
					else
						break;
				}
		for(int i=1;i<=m;i++)
			for(int j=1;j<=n;j++)
				for(int k=1;k<=j;k++)
					if(a[k][i]==1)	
						Sum[i][j]++;
		for(int i=1;i<=m;i++)//列 
			for(int up=1;up<=n;up++)//行 
				for(int down=up+2;down<=n;down++)
				{
					if(Sum[i][down]==Sum[i][up] && a[up][i]==0 && a[down][i]==0)
					{
						long long k1=sum[up][i],k2=sum[down][i];
						ans_c+=(k1*k2%MOD)%MOD;
					}
				}
		cout << ans_c*c%MOD << " ";
		if(f==0)
		{
			cout << "0" << endl;
			return 0;
		}
		for(int i=1;i<=m;i++)//列 
			for(int up=1;up<=n;up++)//行 
				for(int down=up+3;down<=n;down++)
				{
					if(Sum[i][down]==Sum[i][up] && a[up][i]==0 && a[down][i]==0)
					{
						long long k1=sum[up][i];
						for(int k=down-1;k>=up+1;k--)
							ans_f+=(k1*sum[k][i]%MOD)%MOD;
					}
				}
		cout << ans_f*f%MOD << endl;
	}
	return 0;
}
2022/12/13 14:57
加载中...