AtCoder が提供しているABC(AtCoder Beginner Contest)320 のA問題をC++とPythonで解いてみました。ABC320は、2023年9月16日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 Leyland Number(Difficulty : 10)
問題はリンク先をご覧ください。
指数の計算をする問題です。AtCoder Problems による Difficulty は 10 でした。
解答案
C++ プログラム例(ABC320A)
$a^b$ と $b^a$ を求めて加えるだけです。$a$ を $b$ 回掛けた値 ab と、$b$ を $a$ 回掛けた値 ba を求めて、ab と ba を加えた値を出力しています。
累乗は非常に速く大きくなります。最大の制約について、入力例2で確認しています。結果の値が、774840978 となり、32ビット整数で足りることが分かります(符号付き32ビット整数の上限は約21億です)。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int ab = 1;
for (int i = 0; i < b; ++i) {
ab *= a;
}
int ba = 1;
for (int i = 0; i < a; ++i) {
ba *= b;
}
cout << ab + ba << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC320A)
Python では、累乗を演算子で書くことができます。このため、簡潔に書けています(4行目)。また、Python の整数は値に制限がないため、この意味でも気楽に書けます。
"""AtCoder Beginner Contest 320 A"""
a, b = map(int, input().split())
print(a ** b + b ** a)
こちらも「AC」と判定されました。
最後に
この問題を読んだ瞬間に Python なら入力と演算の2行で書けることが分かりました。コンテストは、C++で参加しているため、言語を変えることを避けて、C++ で書きました。
Python にもう少し習熟すると問題によって言語を変えることができるようになるかもしれません。
引き続き ABC の問題を紹介していきます。