每天一道英文题,ICPC不自闭(2)

Codeforces Round #766 (Div. 2) - A

题目翻译

有一个包含 n 行 m 列的网格,一些网格是黑色的,剩下的网格是白色的。

在一个操作中,你可以挑选一些黑网格并做下列其中一项:

  • 将其中一行都涂黑
  • 将其中一列都涂黑

给你两个整数 r 和 c。找到使第 r 行和第 c 列中的网格变为黑色所需的最小操作数,或确定这是不可能的。

输入

输入由多个测试用例组成。第一行包含一个整数 t(1≤t≤100)-测试用例的数量。测试用例的描述如下

每个测试用例的第一行包含四个整数n、m、r和c(1≤n,m≤50; 1≤r≤n;1≤c≤m) -网格中的行数和列数,以及需要分别变为黑色的网格的行数和列数。

随后是 n 行,每行包含 m 字符。这些字符中的每一个都是“B”或“W”-分别是黑色和白色的网格。

输出

对于每个测试用例,如果无法使 r 行和 c 列中的网格变为黑色,则输出 −1。

否则,输出一个整数—使 r 行和 c 列中的网格变为黑色所需的最小操作数。

解题思路

其实这道题是个脑筋急转弯,读懂题就可以出思路了,只要有 B 就一定能涂黑最多是 2

如果在规定的行或列上就是 1

正好在规定的行列上就是 0

没有 B 就是 -1

代码示例

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;

int t;
int n,m,x,y;
int l,r;
int a[101][101];
string s[101];

int main(){
	cin>>t;
	while(t--){
		cin>>n>>m>>x>>y;
		bool ok=0;
		bool cnt=0;
		int type=0;
		for(int i=1;i<=n;i++) cin>>s[i];
		for(int i=1;i<=n;i++){
			for(int j=0;j<m;j++){
				if(s[i][j]=='B'){
					if(x==i&&y==j+1){
						type=4;
					}
					if(x==i&&y!=j+1&&type!=4){
						type=3;
					}
					if(x!=i&&y==j+1&&type!=4){
						type=3;
					}
					if(x!=i&&y!=j+1&&type<3) type=2; 
				} 
			}
		}
		if(type==4) cout<<"0"<<endl;
		if(type==3) cout<<"1"<<endl;
		if(type==2) cout<<"2"<<endl;
		if(type==0) cout<<"-1"<<endl;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值