Codeforces Round #589 (Div. 2) - B

题目大意:给定一个 $h$ 行, $w$ 列的矩形,接下来一行 $h$ 个数字, $hi$ 代表第 $i$ 行从左到右有连续的 $hi$ 个染成黑色的方块,列同理,然后问满足条件的矩形的个数(% 1e9 + 7)。

比赛写的时候第一次挂掉了,因为判断原条件不成立的代码写挂了= = ,不知道自己当时在想什么。

我在处理数据时,开了两个数组,分别记录行与列的染色情况。

	forab(i, 1, h)
	{
		cin >> r[i];
		forab(k, 1, r[i])
			G[i][k] = 1, R[i][k] = 1;
	}
	forab(i, 1, w)
	{
		cin >> c[i];
		forab(k, 1, c[i])
			G[k][i] = 1, C[k][i] = 1;
	}

  

我判断原条件不成立的想法是:

	forab(i, 1, h)
	{
		if (C[i][r[i] + 1] == 1)
		{
			flag = 1;
			break;
		}
	}
	forab(i, 1, w)
	{
		if (R[c[i] + 1][i] == 1)
		{
			flag = 1;
			break; 
		}
	}

最后计数的判断为:

	forab(i, 1, h)
	{
		forab(j, 1, w)
		{
			if (G[i][j])
				continue;
			if (r[i] + 1 == j || c[j] + 1 == i)
				continue;
			else
				ans = 2 * ans % MOD;
		}
	}

  

猜你喜欢

转载自www.cnblogs.com/zssst/p/11610845.html