D. White Lines(思维)

题意:给个N*N的黑白矩阵,给大小k的橡皮,求擦一次最多能有多少行列全部都是白色的。
思路:对每一行,每一列求其贡献,如果其中没有黑色格子,说明这个行或者列对任意格点为左上角的操作都有贡献,如果最后一个黑子和第一个黑子的距离超过k,则是无法覆盖的,否则,这个行或列对一下符合条件的格点具有贡献。

const int N = 2005;
int p[N][N];//以每一个点为左上角的贡献
char s[N][N];
int main()
{
	//STDIN;
	int n, k;
	cin >> n >> k;
	f(i,1,n)scanf("%s", s[i] + 1);
	int res = 0;
	f(i, 1, n)//计算每行对哪些点有贡献
	{
		int b = 0, e = 0;
		f(j, 1, n)
		{
			if (s[i][j] == 'B')
			{
				if (!b)b = j;
				e = j;
			}
		}
		if (b == 0)res++;//对全局都有贡献
		else if(e-b+1<=k)
		{
			f(j, max(1, i - k + 1), i)
				f(jj, max(1, e - k + 1), b)p[j][jj]++;
		}
	}
	f(i, 1, n)//计算每列对哪些点有贡献
	{
		int b = 0, e = 0;
		f(j, 1, n)
		{
			if (s[j][i] == 'B')
			{
				if (!b)b = j;
				e = j;
			}
		}
		if (b == 0)res++;//对全局都有贡献
		else
		{
			f(j, max(1, i - k + 1), i)
				f(jj, max(1, e - k + 1), b)p[jj][j]++;
		}
	}
	int ans = 0;
	f(i, 1, n)f(j, 1, n)ans = max(ans, p[i][j]);
	cout << ans + res << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值