AtCoder Beginner Contest 039 の A/B/C 問題の解法 #ABC039
2024-01-22AtCoder Beginner Contest 039 の A/B/C 問題の解法。
実装はこちら atcoder/abc/001-100/039 · michimani/atcoder
A - 高橋直体
表面積なので、直方体の 6 面の面積を計算して出力する。直方体の 6 面は 2 面ずつペアになるので、
- \(高さ \times 幅\)
- \(幅 \times 奥行き\)
- \(奥行き \times 高さ\)
の 3 つの積を計算して合計したものを 2 倍すればよい。
#include <iostream>
using namespace std;
using ui = unsigned int;
int main()
{
ui a, b, c;
cin >> a >> b >> c;
cout << (a * b + b * c + c * a) * 2 << endl;
return 0;
}
提出 #49583355 - AtCoder Beginner Contest 039
B - エージェント高橋君
\(X = N^4\) なので \(N = \sqrt[4]{X}\) となる。\(\sqrt[4]{X}\) を計算するには sqrt
を 2 回使うか、もしくは pow(x, 1.0 / 4.0)
を使う。この問題においてはどちらも実行時間に大差はない。
#include <iostream>
#include <cmath>
using namespace std;
using ui = unsigned int;
int main()
{
ui x;
cin >> x;
cout << ui(sqrt(sqrt(x))) << endl;
return 0;
}
提出 #49583355 - AtCoder Beginner Contest 039
C - ピアニスト高橋君
“ド” から始まる鍵盤を表す文字列 \(s\) と、それに対応する文字列を用意しておく。
\(s\) の \(i\) 番目の文字を高橋くんがいる鍵盤として、与えられた \(S\) の最初の 12 文字が \(i\) 番目の文字列から始まる \(s\) と一致するかを調べる。具体的には、 \(s_{i \mod 12}\) から \(s_{i + 11 \mod 12}\) までが全て \(S_j (0\leq j \leq 11)\) と一致するかどうか \(0 \leq i \leq 11 \) について調べる。一致したときの \(i\) に対応する音階の文字列が答えとなる。
#include <iostream>
#include <vector>
using namespace std;
using ui = unsigned int;
int main()
{
const string p = "WBWBWWBWBWBW";
const ui ps = ui(p.length());
const vector<string> o = {"Do", "Do", "Re", "Re", "Mi", "Fa", "Fa", "So", "So", "La", "La", "Si"};
string s;
cin >> s;
bool found = false;
ui f = 0;
while (!found)
{
bool ok = true;
for (ui i = 0; i < ps; i++)
{
if (p[(i + f) % ps] != s[i])
{
ok = false;
break;
}
}
if (ok)
{
found = true;
break;
}
f++;
}
cout << o[(f + ps) % ps] << endl;
return 0;
}
提出 #49579145 - AtCoder Beginner Contest 039
comments powered by Disqus