ABC048に参加してみた
A問題
スライスを使って先頭の文字だけを取得して連結しました。
s = [i for i in input().split()] ans = s[0][0:1] + s[1][0:1] + s[2][0:1] print(ans)
B問題
ans = b/x - a/x で求まります。aがxの倍数の時だけans++とすれば大丈夫(なはず)です。
指数表記をint()で整数に直そうとしたんですが、下のように値が変化してしまい悩んでました。
>>> 1000000000000000000/3 3.333333333333333e+17 >>> int(1000000000000000000/3) 333333333333333312
C問題
配列aを左から2つずつ区切っていったときにその2つのうち左側を優先的に減らす理由はないため、右側を優先的に減らしていく貪欲法で実装しました。
n, x = map(int, input().split()) a = [int(i) for i in input().split()] count = 0 for i in range(n): s = sum(a[i:i+2]) if s > x: if (s - x > a[i+1]): a[i+1] = 0 a[i] -= (s - x - a[i+1]) else: a[i+1] -= sum(a[i:i+2]) - x count += s - x print(count)
D問題
適当に入力例を紙に書いて試していたところ、ab???baのように真ん中に挟まれているところがあったとしても関係なさそうだと思いつき、両端の文字と文字列の長さが偶数か奇数かで判断すればよさそうだと思い浮かび、ちゃんと証明できていたわけではありませんがとりあえず提出したらACでした。
s = input() if s[0:1] == s[len(s)-1:len(s)]: if len(s) % 2 == 1: print("Second") else: print("First") else: if len(s) % 2 == 1: print("First") else: print("Second")
雑感
Bで悩んでいた時間がすごいもったいなかったなと思いました。苦手なDPが出なかったこともあって4完できてよかったです。