LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263) #ABC263
2024-01-10LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263) の A/B/C 問題の解法。
実装はこちら atcoder/abc/201-300/263 · michimani/atcoder 。
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
\(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
\(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