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?

はじめに

前回の記事を誤投稿してしまってすみません(アホか)
github actionsのミスにより投稿されてしまいました(罪を機械になすりつけるな あとpaizaのキャンペーンでいいね稼ぎするな)

ユーザ名 hidehico
コンテスト名 AtCoder Beginner Contest 390
順位 6496th / 12572 (top 5.43%)
パフォーマンス 484
レーティング 911 → 874 (-37)

3完10ペナ、aw <ESC>1000.(ドットリピートすな)、vimで入力するとおもしろいことになりますよ(wが大量に出るだけだろ)
はい、Bで少数誤差で9ペナ食らいました、そして、苦心のすえACしたコードもafter contestに見事撃墜されました
そして、終了10分前に、EをACするアイデアを思いついたものの、結局ACできませんでした、コンテスト終了後コードを書いてACすると落胆しました

コンテスト中の流れ

開始3分

1ペナ食らいつつもAをAC?

開始5分

Bで3ペナ食らう
時間の無駄だと気づき、スキップ

開始20分

CをAC

開始25分

Bで2ペナ

開始50分

Dを覗いてみるも、なかなかアイデアが、うかばす、Bに戻る
そしてEを覗くもよくわからず

開始80分

やっとBを通す

開始90分

Eを通す アイデアを思いつく

コンテスト終了

結局、EはACできず、通してたら水パフォでてたことき気づきショック

使っているライブラリ

github やっとciを直せてほっとしてます、modintを追加しました
使うのであれば、starを押して頂けるとものすごくうれしいです。qiitaのいいねの数倍ぐらい

二分探索ライブラリ

def binary_search(fn: Callable[[int], bool], right: int = 0, left: int = -1) -> int:
    while right - left > 1:
        mid = (left + right) // 2

        if fn(mid):
            left = mid
        else:
            right = mid

    return left

そんじゃ一問ずつ感想書きますか

A問題

普通に全探索した
問題分を誤読して、1ペナ食らった

ACコード(ライブラリ抜粋)

A = il()
B = list(sorted(A))

NE(A == B)


for i in range(4):
    k = i + 1
    n = A[:]
    n[i], n[k] = n[k], n[i]

    YE(B == n)

print("No")

B問題

少数誤差が大変だった

ACコード(ライブラリ抜粋)
注意: 現在はacできません

N = ii()
YE(N == 2)
A = il()

for i in range(N - 1):
    B = [A[-1]]
    a = A[i + 1] / A[i]

    for _ in [0] * (N - 1):
        B.append(B[-1] / a)

    YE(A == list(reversed(B)))

print("No")

C問題

すぐ解法が思いついたので良かった(当然だろ)
黒いマスのxの最大値、最小値、yの最大値、最小値をgetして

先程のxの最小値 - xの最大値とyの最小値 - yの最大値、で二重ループ回して、そのどれか一つでも、白ならNo、そうでないなら、Yesを出力すればいい

ACコード(ライブラリ抜粋)

H, W = il()
S = li(H, s)

ax, bx = 0, H
ay, by = 0, W

for i in range(H):
    for k in range(W):
        if S[i][k] != "#":
            continue

        ax = max(ax, i)
        bx = min(bx, i)
        ay = max(ay, k)
        by = min(by, k)

for i in range(bx, ax + 1):
    for k in range(by, ay + 1):
        NE(S[i][k] == ".")

print("Yes")

D問題

再帰関数だと思ったけど、よく分からなっかた
青diffでびっくりした

E問題

dpだと思ったけど、偽考察が走り、ACできなかった
残り10分で、ナップサック+二分探索で、ACできる事に気づき、コードを書くもACできなかった

ACコード(ライブラリ抜粋)

N, X = il()

D = defaultdict(list)

for _ in [0] * N:
    V, A, C = il()
    V -= 1
    D[V].append((A, C))

DP = []

for V in range(3):
    dp = create_array2(len(D[V]) + 1, X + 1, -INF)
    dp[0][0] = 0

    for i in range(len(D[V])):
        A, C = D[V][i]
        for x in range(X + 1):
            dp[i + 1][x] = max(dp[i + 1][x], dp[i][x])

            if x + C > X:
                continue

            dp[i + 1][x + C] = max(dp[i + 1][x + C], dp[i][x] + A)

    DP.append(dp[-1])


def check(mid):
    cos = 0

    for V in range(3):
        for i in range(X + 1):
            if DP[V][i] >= mid:
                cos += i
                break
        else:
            break
    else:
        return False if cos > X else True

    return False


print(binary_search(check, INF, 0))

最後に

書いてるとき泣きそうになりました
ナップサックdpのライブラリを用意しとけばよかったと痛感しました
まあ言い訳ですけど、だけどこの教訓を次に生かしたいです
ちなみにABCE 4完最遅でも水perfでるらしいです

:qa!

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?