初めに
最近愛用していた、manajaro linuxを間違えて壊してしまいました(なーにをやっているんだか)
理由は、最強のパッケージマネージャnixでpypyがビルドできなかったので壊れたと勘違いし、パーティションを消し去ってしまいました。
でこの記事を書いている環境は、linuxをインストールし直してarchlinuxで書いています(インストールの難しさ、No.1で草)
archlinuxのインストールの難しさは、こちらを見ていただくとよくわかるはずです。
別の話してすみません
えーはい、3完、茶パフォ、-17でした。
原因は、Cで手こずったのと(3ペナ)、Dの考察ミスってこのような結果になりました。
でD飛ばして、EやればギリACできたかなーと思うと、今年最後のコンテストなのに、情けないです。
さて一問ずつ振り返り書きますか
使っているライブラリ
trie木のライブラリを追加しました。
あとは、変更ありません。
筆者のdotfiles(宣伝)
レポジトリ
A問題
4枚のカードが与えられるので、好きな一枚を追加した、フルハウスになるか答えてください
的な問題だったから、普通に出てきた回数を求めてそれで、フルハウスになるか判定すればいい
少しコードが長くなってしまいました
ACコード(ライブラリ抜粋)
L = il()
d = defaultdict(int)
for i in L:
d[i] += 1
if not len(d.values()) == 2:
print("No")
exit()
if (min(d.values()) == 1 and max(d.values()) == 3) or (
min(d.values()) == 2 and min(d.values()) == 2
):
print("Yes")
else:
print("No")
B問題
00、1~9のボタンがあるから、目的の文字列にするために、最小の入力回数を求めてください
って感じだった。
個人的にAより簡単だった気がする
特にpython勢にとっては、やりやすかったかも
replaseメソッドを使って0を0に置き換えればOK
そしてその長さを出力すればいい。
コードゴルフできそう、結果37byte
ACコード(コードゴルフver)
print(len(input().replace("00","0")))
C問題
一文字、置き換えか、削除か、任意の場所に挿入して、SとTが一緒になればいい
とりあえず、文字数の差が、2以上だったら、打ち切る
文字数が同じ場合は、差が1以下だったらYes、それ以外だったらNoで打ち切る
そして、削除と追加どちらも書くと、めんどくさいので、削除だけやる。
Sの文字数が、Tの文字数より大きい場合は、SとTを入れ替える
SとTのTの文字数-1までが同じだったら、Yesで打ち切り、RE対策
であとは普通に削除動作のシミュレーションをすればいい
実装をバグらせたりして3ペナ食らって、レートの被害が増大した
ACコード(ライブラリ抜粋)
ii()
S = s()
T = s()
if abs(len(S) - len(T)) >= 2:
print("No")
exit()
if len(S) == len(T):
count = 0
for i in range(len(S)):
if S[i] != T[i]:
count += 1
if count <= 1:
print("Yes")
else:
print("No")
exit()
if len(S) > len(T):
S, T = T, S
if S == T[:-1]:
print("Yes")
exit()
flag = False
i = 0
for cur in range(len(T)):
if T[cur] != S[i]:
if flag:
print("No")
exit()
flag = True
else:
i += 1
print("Yes")
D問題
白のa,bが黒のc,dが$a<=c$と$b<=d$が一つでも成り立てばNo、それ以外ならYesと終了5分ぐらい前に気づいたけど、実装方法がよくわからずACできなかった
公式解説を見てなるほどって思った
E問題
$K <= N-K$の場合は、普通に選ぶで、$K >= N-K$の場合は、除外するのを選ぶ
なるほど
最後に
ここ2週間の精進方法を間違っていたと痛感しました。
ピンポイントで水diffの問題を解くんじゃなくて、安定して緑diffが解けるようになるのがいいと、思いました。
まだ僕は水diffの問題の解ける知識はdpぐらいしか持ってないのです
最後まで見ていただきありがとうございました。