問題

https://atcoder.jp/contests/abc422/tasks


A - Stage Clear

問題概要

文字列が与えられるので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;
}

B - Looped Rope

問題概要

全ての黒いマスに対して、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;
}

C - AtCoder AAC Contest