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;
}
}
|