题目大意
给一个矩阵,包含‘*’和‘.’,炸弹可以消掉所在行列的所有‘*’问能否只放一个炸弹就消除所有的‘*’
思路
记录每行每列的‘*’的数量和‘*’的总数, 然后遍历行列,如果交叉点有‘*’就当行列上的‘*’数和等于cnt+1时,可解,无‘*’则是等于cnt是可解。否则无解
代码看的比较清楚
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+10;
char maze[maxn][maxn];
int c[maxn],r[maxn];
int main(){
int n,m;
cin >>n>>m;
for(int i = 0 ; i < n ; i ++){
scanf("%s", maze[i]);
}
int cnt = 0;
for(int i = 0 ; i < n ; i ++){
for(int k = 0 ; k < m ; k ++){
if(maze[i][k] == '*'){
c[i]++;
r[k]++;
cnt ++;
}
}
}
int x =-1,y = -1;
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < m ; j ++){
if(maze[i][j] == '*'){
if(c[i] + r[j] == cnt +1 ){
x = i;y = j;
break;
}
}
else{
if(c[i] + r[j] == cnt ){
x = i;y = j;
break;
}
}
}
if(x != -1) break;
}
if(x != -1){
puts("YES");
printf("%d %d",x+1,y+1);
}
else puts("NO");
}