https://atcoder.jp/contests/abc422/tasks
文字列が与えられるのでparseして言われた通りの処理をしてください。
入力1つ目の数字を $i$,2つ目の数字を${j}$とする。
${j=8}$ のときは ${j}$ を ${0}$ にして ${i}$ をインクリメント、それ以外のときは ${j}$ をインクリメントすればよい。
#include<iostream>
#include<vector>
using namespace std;
int main(){
string str;cin>>str;
int i=str[0]-'0';
int j=str[2]-'0';
if(j==8){
j=1;
i++;
} else {
j++;
}
cout << i << '-' << j << endl;
}
全ての黒いマスに対して、4近傍にある黒いマスの数が4か2であるか確認してください。
入力を見ていって4近傍を確認するだけでよい。
4近傍を探索するときは
const int di[] = {1,0,-1,0};
const int dj[] = {0,1,0,-1};
のような配列を宣言しておくと 現在の座標 + di[v] で4近傍の座標が求められる。( ${v}$ は ${0 \le v < 4}$)
// ,,廿_廿,,
#include<iostream>
#include<vector>
using namespace std;
const int di[]={0,1,0,-1};
const int dj[]={1,0,-1,0};
int main(){
int h,w;cin>>h>>w;
vector<string>hw(h);
for(int i=0;i<h;++i)cin>>hw[i];
for(int i=0;i<h;++i)for(int j=0;j<w;++j){
int count=0;
if(hw[i][j]=='.')continue;
for(int v=0;v<4;++v){
int ni = i + di[v];
int nj = j + dj[v];
if(ni<0||nj<0||ni>=h||nj>=w)continue;
if(hw[ni][nj]=='#')count++;
}
if(!(count==2||count==4)){
cout << "No" << endl;
return 0;
}
}
cout << "Yes" << endl;
}