题目: 传送门
思路: 一个炸弹需要炸掉所有墙壁,所以对于任何一个墙壁,应该与炸弹所放位置 的 x坐标或者 y坐标其中之一相同 , 那么我们把墙壁的 X ,Y 坐标记录一下个数 , 如果对于 一个点,存在 sum[x]+sum[y] == sum。那么这个点就是我们要的结果
sum表示的是炸弹的个数,并且要注意,上述等式有个特殊情况,如果放置的位置有炸弹,等式左边应该减 1 ,因为 此时 有一个炸弹的 x, y 均与所放位置相同.
因为 数据范围不大,我们在知道上述方法之后,暴力枚举即可.
int vis[1100];
int viss[1100];
int res[1100][110];
string s[1100];
int main() {
int n,m;
int sum =0;
int ans_x1 = -1;
int ans_y1 = -1;
cin>>n>>m;
int flag = 0;
for(int i=0;i<n;i++) {
cin>>s[i];
for(int j = 0;j<m;j++) {
if(s[i][j]=='*') {
sum++;
vis[i]++;
viss[j]++;
res[i][j] = 1;
}
}
}
if(sum == 0) {
cout<<"YES"<<endl;
cout<<"1 1"<<endl;
return 0;
}
for(int i = 0;i<n;i++) {
for(int j = 0;j<m;j++) {
if(vis[i]+viss[j] == sum + res[i][j]) {
//cout<<vis[i]<<' '<<viss[j]<<' '<<sum<<' '<<res[i][j]<<endl;
cout<<"YES"<<endl;
cout<<i+1<<' '<<j+1<<endl;
return 0;
}
}
}
cout<<"NO"<<endl;
return 0;
}