#はじめに
オイイイイイイイイイイイイッス!どうも、歌うプログラマのことり兄貴(・8・)です!
「AtCoder Beginner Contest 196」、お疲れさまでした~
今朝あたりにAtCoderの取材の動画を見て、「そや!ワイもコンテストの風景を録画してみよ!」って思い立ってやってみました!
【実況3完】AtCoder Beginner Contest 196【2021/3/20】
3完でした~
せっかくなので今回から記事とかも書いてみようと思います!
1年後のワイにはD問題とかも余裕で解説してて欲しいな~
あ、今回はPythonで書いてます!
#目次
1.A - Difference Max
2.B - Round Down
3.C - Doubled
4.おわりに
#1. A - Difference Max
####問題
整数a,b,c,dが与えられます。xをa以上b以下,yをc以上d以下になるように選んでx - y を最大化してください。
####制約
・-100 <= a,b,c,d <= 100
・a <= b, c <= dであることが保証されている
####ことり兄貴(・8・)の解答(リアタイ)
a, b = map(int, input().split())
c, d = map(int, input().split())
print(b - c)
x - y の差を大きくしたい
↓
xを最大化, yを最小化したい
↓
よって
x = b, y = cとなり、
b - c を出力すればおけです。
#2. B - Round Down
####問題
整数または小数Xが与えられるので、小数点以下を切り捨てて整数で出力してください。
####制約
・0 <= x <= 10の100乗
・X は整数、または小数点以下が100桁以下の小数であり、先頭に余計な0は付かない。
####ことり兄貴(・8・)の解答(リアタイ)
x = input()
t = ''
for a in x:
if a == '.': break
t += a
print(t)
まず10の100乗という尋常でない数...w
計算しようとしちゃいけません。
ちなみにワイは最初float型に入れてみて、誤差にビビりました()
小数点以下を切り捨てる = 小数点の直前までを出力
ということなので空文字列tを作り、forループで小数点が出現しない限り
その数字(てか実質文字扱い)をtに追加してみました。
ちなみに、
####コードダイエットガチ勢の解答
print(input().split('.')[0])
1行でもいけますw
入力した文字列を小数点で分割
↓
そのうち最初の要素を出力
リアタイで書きたかったなぁ、これw
#3. C - Doubled
####問題
整数Nが与えられます。
1以上N以下の数のうち、桁数が偶数(先頭に0をつけない)でその前半と後半が
文字列として等しいものはいくつありますか。
####制約
・Nは整数
・1 <= N <= 10の12乗
####ことり兄貴(・8・)の解答(リアタイ)
n = int(input())
i = '1'
ans = 0
while(True):
if int(i + i) <= n:
ans += 1
else:
break
i = str(int(i) + 1)
print(ans)
これはちょっと最初「なんだこれは...?」ってなってしまいました。
とりあえず紙にいろいろ書いてみて
「0から100の間には11,22,33...と9コあって...」
「1000~10000の間には1111,1212,1313ってあれ?1010もか」
「あ!!そっか!これシンプルに半分見たときに1,2,3,4...ってなればいいんじゃん!」
といった具合に辿り着きましたw
まさかこんなにシンプルだったとは。圧倒的アハ体験。
iを'1'として宣言
↓
whileループ
iを二つ並べたものを整数としてみたときにn以下であれば答えが1つ増え、
nより大きくなったらループを終了。
といった具合。
提出するときに「TLEならんかな...?」ってちょっと心配だったけど、nが10の12乗だったとしても
最大値は9が6コ並んだやつ = 約10の6乗
とかなので普通に回りきってくれました。
ちなみに、ansを作ってしまいましたが結局それってiなので
※ただしn < 11のときの答えは0なので今回はiを0で宣言
####コードダイエットした解答
n = int(input())
i = 0
while int(str(i + 1) * 2) <= n:
i += 1
print(i)
リアタイではiをstrとして宣言したけど、こっちのほうがスッキリかも~
ついでにwhile文にもかなり無駄があったので修正。
#4. おわりに
今回のAからCは、「気付き」と「ひらめき」って感じだったな~
気付けばパッって解けるけど、気付かないと途方もなく感じるやつ...w
筆者はこれまでpaiza.ioをメインのコーディング環境として使っていたのですが、最近PythonでABCの過去問を解き始めるにあたって「せっかくだしコード保存してぇ」ってなってVSCodeに乗り換えました。
使いやすくてええな~!
動画もだけど、こういった記事も将来見たときに「この時の自分はこういう問題をこんな風に解いてたんだ」って感じで見れそうで楽しみなのでぜひ続けてみたい。
この記事を見てる方の参考にもなれば幸いです!!