はじめに
この記事では、AtCoder Beginer Contest 162のA~E問題を解説します。
このコンテストから、使用可能言語が変更となりました。Python
のバージョンは3.8.2
に変更されました。
これでようやく、gcd
(最大公約数)のインポートのストレス(Python競プロでやりがちなミス)から解放されました。
A - Lucky 7
https://atcoder.jp/contests/abc162/tasks/abc162_a
問題文に「3桁の整数Nが与えられます」とあるので、int
として扱いたくなりますが、
数字7
が含まれているかを確認したいだけなので、文字列として扱うのが良いでしょう。
1 | N = input() |
B - FizzBuzz Sum
https://atcoder.jp/contests/abc162/tasks/abc162_b
問題文がちょっとややこしい気がしますが、「N項目までに含まれる数の和を求めてください。」とあるので、要するに3の倍数でも5の倍数でもない数
を足せば良いです。
気をつけるのはrange
の範囲くらいでしょうか。
1 | N = int(input()) |
C - Sum of gcd of Tuples (Easy)
https://atcoder.jp/contests/abc162/tasks/abc162_c
GCDの問題です。Pythonistaとしてはこのタイミングで、GCDを出してくることに運命を感じますね。
gcd(a,b,c) = gcd(gcd(a,b),c)
であるため、単純にループを回せば良いです。
ただし、Python
の場合は計算が結構ギリギリなので、gcd(a,b)
の部分を使いまわします。
他の方のコードを見ていると、この高速化をしないで通している方もいました。
1 | from math import gcd |
D - RGB Triplets
https://atcoder.jp/contests/abc162/tasks/abc162_d
まずは、一つ目の条件(全ての文字が異なる組)を数えます。
その後、二つ目の条件を満たす組を数えて引きます。
Python
で文字列中に指定した文字がいくつ含まれるか
を数えたい場合はcount
が便利です。
1 | N = int(input()) |
E - Sum of gcd of Tuples (Hard)
https://atcoder.jp/contests/abc162/tasks/abc162_e
ほとんど解説PDFの通りです。
1 | MOD = int(1e+9 + 7) # 忘れずにintをつける |
ちょっとプリントデバッグを仕込んでみましょう。
1 | MOD = int(1e+9 + 7) # 忘れずにintをつける |
そして、プログラムを実行し3 2
を入力して下さい。
1 | 3 2 |
[0, 8, 1]
は
- 0: 先頭の要素はダミー
- 8: 全てが1の倍数となる数列の数
- 1: 全てが2の倍数となる数列の数
[0, 7, 1]
は
- 0: 先頭の要素はダミー
- 7: GCD=1となる数列の数
- 1: GCD=2となる数列の数
となっていることが確認できます。
記事情報
- 投稿日:2020年4月13日
- 最終更新日:2020年4月13日