AtCoder Beginner Contest 285 A〜C問題をPythonで解いてみました
ABC285(AtCoder Beginners Contest 285)
A〜C問題をPythonで解いてみました。
- コードは雑めです。ゆるしてー
- 競技プログラミングの勉強一切したこと無いので、テクニックは知らないよ。ごめんねー
A問題(diff=11)
a, b = map(int,input().split())
if b == a*2 or b == a*2+1:
print('Yes')
else:
print('No')
- パッと見ちょっと難しいんでは?って思うかもしれませんが、「これがA問題ということは発想の転換をするだけで解ける問題かなぁ〜」と当たりをつけてよくよく木を見ました。
- よく見ると分岐先は 分岐元*2 と 分岐元*2+1 になっていることがわかりますね
- 2分木だから当たり前かー、と思いながらその順序でif文を書いてやればOKでした。
- $ 1 \leqq a < b \leqq 15$ となっており、$ a<b $ なところも確認してsubmitって感じですね。
B問題(diff=108)
N=int(input())
S=input()
for x in range(1,N):
for l in range(N):
if l+x >= N or S[l+x] == S[l]:
break
print(l)
- Longest Uncommon Prefix というタイトルがまずヒントでしたね。解きたい問題がイメージしやすかったです。
- xを1から、lを0から初めて、同じ文字が出てくるまで検索するプログラムを書いていけばOKですね。
- l+x >= Nとなるケースについては問題文の最後にあるようにNを超えた時点のlを出力すればOKということで、こんなプログラムになりました。
C問題(diff=157)
S=input()
n=0
for i in range(len(S)):
n*=26
n+=ord(S[i])-ord('A')+1
print(n)
- まず1文字ずつの数値化について考えますと、抽出した文字のASCIIコードから
A
のASCIIコードを引いて+1すればいいと求まります - あとは桁が進むごとに進数分掛けてやればいいので、26進数ということで26倍してやればいいだけです。
感想
- 今回の問題も易しめでしたね。最近は簡単めな問題が多いAtCoderですね
- 学生エンジニアとしてアルバイトしたい方など、プログラム練習中の方にはわりと丁度いい問題かと
- 冷静に問題を読んで、アルゴリズムを書けば解ける問題かと思います
- 10分ぐらい遅れてUnratedで参加したのですが、20分ぐらいで解けましたね。