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?

緑によるABC386振り返り

Last updated at Posted at 2024-12-30

初めに

最近愛用していた、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ぐらいしか持ってないのです

最後まで見ていただきありがとうございました。

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?