michimani.net

LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263) #ABC263

2024-01-10

LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263) の A/B/C 問題の解法。

実装はこちら atcoder/abc/201-300/263 · michimani/atcoder

A - Full House

A - Full House

\(A, B, C,D,E\) を読み込んで、整数と出現回数を map<ui, ui> に記録する。

map のサイズが \(2\) で、かつ、 map の先頭の要素の出現回数が \(3\) または \(2\) であれば Yes を出力して終了。それ以外であれば No を出力して終了する。

#include <iostream>
#include <map>

using namespace std;
using ui = unsigned int;

int main()
{
  map<ui, ui> dc;

  for (ui i = 0; i < 5; i++)
  {
    ui d;
    cin >> d;

    dc[d]++;
  }

  if (dc.size() == 2 && (dc.begin()->second == 3 || dc.begin()->second == 2))
  {
    cout << "Yes" << endl;
    return 0;
  }

  cout << "No" << endl;
  return 0;
}

提出 #49186680 - LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263)

B - Ancestor

B - Ancestor

\(P_i\ (i\geq2)\) について、 \(i\) を \(key\)、 \(P_i\) を \(value\) とした map<ui, ui> を作成する。

\(key = P_n\) を初期値として、 \(value = 1\) になるまで map から値を取り出して、 \(value\) を次の \(key\) として処理を継続する。その間に \(ans\) を \(1\) ずつ増やしていく。

最後に \(ans\) を出力して終了する。

#include <iostream>
#include <map>

using namespace std;
using ui = unsigned int;

int main()
{
  ui n;
  cin >> n;

  map<ui, ui> p;
  for (ui i = 2; i <= n; i++)
  {
    ui pi;
    cin >> pi;
    p[i] = pi;
  }

  ui c = p[n];
  ui ans = 1;
  while (c != 1)
  {
    c = p[c];
    ans++;
  }

  cout << ans << endl;
  return 0;
}

提出 #49187871 - LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263)

C - Monotonically Increasing

C - Monotonically Increasing

\(N\) 重のループを回して、 \(1 \leq i \leq M\) から \(N\) この整数を選ぶ組み合わせを全探索する。

ループのネストをする際に、開始位置を \(i+1\) とすることで狭義単調増加な数列を生成することができる。

#include <iostream>

using namespace std;
using ui = unsigned int;

void cal(ui &n, ui &m, ui cur, ui cnt, string s)
{
  s += to_string(cur);
  if (cnt == n)
  {
    cout << s << endl;
    return;
  }

  s += " ";
  for (ui i = cur + 1; i <= m; i++)
  {
    cal(n, m, i, cnt + 1, s);
  }
}

int main()
{
  ui n, m;
  cin >> n >> m;

  for (ui i = 1; i <= m; i++)
  {
    cal(n, m, i, 1, "");
  }

  return 0;
}

提出 #49187791 - LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263)


comments powered by Disqus