トヨタ自動車プログラミングコンテスト2023#8(AtCoder Beginner Contest 333) #ABC333
2023-12-20問題 - トヨタ自動車プログラミングコンテスト2023#8(AtCoder Beginner Contest 333) の A/B/C 問題の解法。
実装はこちら atcoder/abc/301-400/333 · michimani/atcoder 。
A - Three Threes
特筆する点はなし。
提出 #48533797 - トヨタ自動車プログラミングコンテスト2023#8(AtCoder Beginner Contest 333)
B - Pentagon
考えられる距離は 1 (隣同士) とそれ以外の 2 通り。与えられた 2 辺について各頂点の整数値の差がともに 1 かどうか、またはともに 1 以外かどうかを判定する。
#include <iostream>
using namespace std;
int main()
{
string s, t;
cin >> s >> t;
if (
(abs(s[0] - s[1]) % 3 == 1 && abs(t[0] - t[1]) % 3 == 1) ||
(abs(s[0] - s[1]) % 3 != 1 && abs(t[0] - t[1]) % 3 != 1))
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
return 0;
}
提出 #48663727 - トヨタ自動車プログラミングコンテスト2023#8(AtCoder Beginner Contest 333)
C - Repunit Trio
\(N \leq 333\) で、例題から最大のレピュニット数が \(111111111111\) (=12桁) であることがわかる。このことから、 12 種類のレピュニット数から重複を許して 3 つを選んで合計した値をあらかじめ生成・ソートしておき、 \(N\) 番目の値を出力すればよい。
値の生成は \(12^3\) であることから、全探索で十分間に合う。
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
vector<unsigned long long> choices = {1};
for (unsigned int d = 1; d <= 12; d++)
{
choices.push_back(choices[d - 1] * 10 + 1);
}
vector<unsigned long long> list;
map<unsigned long long, bool> exists;
for (auto &c : choices)
{
for (auto &cc : choices)
{
for (auto &ccc : choices)
{
unsigned long long num = c + cc + ccc;
if (!exists[num])
{
list.push_back(num);
exists[num] = true;
}
}
}
}
sort(list.begin(), list.end());
unsigned int n;
cin >> n;
cout << list[n - 1] << endl;
return 0;
}
提出 #48663623 - トヨタ自動車プログラミングコンテスト2023#8(AtCoder Beginner Contest 333)
comments powered by Disqus