0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AtCoder Beginner Contest 285 A〜C問題をPythonで解いてみました

Last updated at Posted at 2023-01-15

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分ぐらいで解けましたね。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?