ARC082: C - Together

問題

C: Together - AtCoder Regular Contest 082 | AtCoder

解答

$a_i$ に対して、 $a_i - 1$, $a_i$, $a_i + 1$ の数を数える。 各々 $a_i$ について3つの値は1度ずつしか数えられないので、数えた値の数の最大値を答えれば良い。

追記

上の解説文を見返して割りと日本語が意味不明だと思った。

数を数える -> 同じ数に対してカウントするだけでなく、前後の数に対してもカウントして考えて良いということを書いたつもり。

また、改めて自分がこの問題を考えた時、縦方向に数、横方向にi番目がその数になりうるかどうかで、二次元のグリッドをイメージして当てはまるものを塗りつぶすイメージをもった。

int main() {
  int N; cin >> N;
  std::unordered_map<int, int> mp;
  int mx = 0;
  rep(i, N) {
    int x; cin >> x;
    REP(y, x - 1, x + 2) {
      mp[y]++;
      mx = std::max(mx, mp[y]);
    }
  }
  std::cout << mx << std::endl;
  return 0;
}