AcWing 5835. 暖炉与水豚C++
原题链接
简单
作者:
水月小脚又香又甜
,
2025-06-05 22:30:44
· 四川
,
所有人可见
,
阅读 25
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<vector<char>> arr(n+2,vector<char>(m+2,'-'));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>arr[i][j];
}
}
vector<vector<int>> record(n+2,vector<int>(m+2,-1));//扩展一下方便记录
//.是看起来是空格,c 表示很冷的水豚,w 表示暖呼呼的水豚,m 表示暖炉;
//寻找目前可确定的所有暖炉位置
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(arr[i][j]=='w'){
record[i][j]=0;//这个位置有暖乎乎的水豚没有暖炉
}
if(arr[i][j]=='c'){
//很冷的水豚处及其周围没有暖炉
for(int k=i-1;k<=i+1;k++){
for(int l=j-1;l<=j+1;l++){
record[k][l]=0;
}
}
}
if(arr[i][j]=='m'){
//暖炉处有暖炉
record[i][j]=1;
}
}
}
int x=-2,y=-2;//初始化可疑水豚位置
//判断是否有可疑水豚
bool flag=false;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(arr[i][j]=='w'){
//温暖的水豚周围要是有暖炉就不可疑
if(record[i][j-1]==1||record[i][j+1]==1
||record[i-1][j]==1||record[i-1][j-1]==1||record[i-1][j+1]==1
||record[i+1][j]==1||record[i+1][j-1]==1||record[i+1][j+1]==1){
//但凡边上有一个暖炉都不是可疑水豚
continue;
} else{
//可疑
x=i;
y=j;
flag=true;
break;//最多只有一个可疑水豚水豚
}
}
}
if(flag){
vector<pair<int,int>> points;
//有可疑水豚,退出循环
//判断可疑水豚附近8个没有水豚的位置是否可能有暖炉
for(int k=x-1;k<=x+1;k++){
for(int l=y-1;l<=y+1;l++){
if(record[k][l]==-1){
points.push_back({k,l});
}
}
}
if(points.size()==0){
//没有元素
cout<<"Too cold!";
}else{
for(int k=0;k<points.size();k++){
cout<<points[k].first<<' '<<points[k].second<<endl;
}
}
break;
}
}
if(!flag){
//没有可疑水豚
cout<<"Too cold!";
}
return 0;
}