社区讨论

关于T1我没乘cf而丢失的6分

灌水区参与者 4已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@lo7ge8b3
此快照首次捕获于
2023/10/27 01:23
2 年前
此快照最后确认于
2023/10/27 01:23
2 年前
查看原帖
话说洛谷数据地图的 11 是不是比较多,n3n^3 都能过诶
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1010, mod = 998244353;
int T, id, n, m, c, f, ansc, ansf, len;
bool s[N][N];
int heng[N];

void solve(int n, int m, int c, int f)
{
	memset(heng, 0, sizeof heng);
	if (c == 0 && f == 0) return;
	for (int j = 1; j <= m; j ++ )
	{
		for (int i = 1; i <= n; i ++ )
			if (!heng[i])
				for (int k = j; k <= m; k ++ )
					if (!s[i][k]) heng[i] ++ ;
					else break;
			else heng[i] -- ;
		for (int i = 1; i <= n; i ++ )
		{
			len = 0;
			while (!s[i + len][j]) len ++ ;
			for (int k = 2; k < len; k ++ )
			{
				if (heng[i] >= 2 && heng[i + k] >= 2)
				{
					ansc = (ansc + (heng[i] - 1) * (heng[i + k] - 1)) % mod;
					ansf = (ansf + (heng[i] - 1) * (heng[i + k] - 1) * (len - k - 1)) % mod;
				}
			}
		}
	}
}
int main()
{
	//freopen("plant.in", "r", stdin);
	//freopen("plant.out", "w", stdout);
	scanf("%d%d", &T, &id);
	while (T -- )
	{
		ansc = ansf = 0;
		memset(s, true, sizeof s);
		scanf("%d%d%d%d", &n, &m, &c, &f);
		for (int i = 1; i <= n; i ++ )
			for (int j = 1; j <= m; j ++ )
			{
				char a;
				cin >> a;
				s[i][j] = a - '0';
			}
		solve(n, m, c, f);
		printf("%d %d\n", ansc, ansf);
	}
	return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...