AtCoder Beginner Contest 305 に参加しました&反省会
AtCoder Beginner Contest 305 の振り返り
- A, B問題を解くことができた
- A問題:Nが5で割り切れない場合、Nを含む区間の起点・終点とNとの差を比較する
- B問題:A地点を起点に各点までの距離を計算し、点p,qの距離を求める
- C問題:当マスの周囲のマスにどれだけクッキーがあるのかをカウントする
- D問題:
A問題
解説*1から
- 全体をで割って考えると、「に最も近い整数を求める」ことになるます。これはを小数部分で四捨五入することで求められます
- 答えは「をで割ったあと四捨五入して整数にし、それを倍にしたもの」になります
#include <iostream> #include <cmath> using namespace std; int main() { int N; cin >> N; cout << int(round(N / 5.0)) * 5 << endl; return 0; }
B問題
atcoder.jp
- 点を点に置き換えます。この置き換えは字をASCIIコードに置き換える操作によります。p-'A'
- を数直線上のの地点とみなして、からまでの座標を計算すると順にになります。
実装例
#include <iostream> using namespace std; int main() { char p, q; cin >> p >> q; int e[] = {0, 3, 4, 8, 9, 14, 23}; cout << abs(e[p - 'A'] - e[q - 'A']) << endl; }
C問題
解説*2から
- 上下左右に隣接するマスの
#
の数に注目します。すぬけ君がクッキーを食べる前、クッキーがあるマスでは、この数は2以上です(角の部分では2、辺の部分では3、内側は4)。いっぽう、クッキーがない場所では、この値は高々1です(クッキーのある長方形に隣接している部分では1、それ以外は0)。すぬけ君がクッキーを食べた後、そのマスは#
から.
になりますが、隣接する#
の数は変わりません。また、もとから.
であった場所で、隣接する#
の数が増えることもありません。結局、上に書いた条件を満たすのは、すぬけ君がクッキーを食べた場所だけです。