Official
A - 安全なネットワーク / Safe Network Editorial
by
A - 安全なネットワーク / Safe Network Editorial
by
physics0523
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
以下の手順でこの問題に正解できます。
- 全てのマスを for ループで巡る。
- そのマスにサーバーが無ければ何もしない。
- そのマスにサーバーがあれば、隣接するマスを調べる。
- 予め \(dx=(0,0,-1,1),dy=(-1,1,0,0)\) という配列を用意してマス \((x+dx_i,y+dy_i)\) を調べることにすると実装が楽です。
- 存在しないマスを参照しないように注意してください。 if 文を適切に使用することで範囲外参照を回避できます。
- 隣接するマスのうちサーバーが存在するものが \(0\) 個または \(4\) 個であれば、答えは
Noである。
- 答えが
Noになることが無ければ、答えはYesである。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
int dx4[4]={0,0,-1,1};
int dy4[4]={-1,1,0,0};
int main(){
int N,M;
cin >> N >> M;
vector<string> S(N);
for(auto &nx : S){cin >> nx;}
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(S[i][j]=='.'){continue;}
int c=0;
for(int k=0;k<4;k++){
int ni=i+dx4[k];
int nj=j+dy4[k];
if(!(0<=ni && ni<N)){continue;}
if(!(0<=nj && nj<M)){continue;}
if(S[ni][nj]=='#'){c++;}
}
if(c==0 || c==4){
cout << "No\n";
return 0;
}
}
}
cout << "Yes\n";
return 0;
}
