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?

はじめに

ユーザ名 hidehico
コンテスト名 トヨタ自動車プログラミングコンテスト2025(AtCoder Beginner Contest 389
順位 2095th / 12393 (top 1.75%)
パフォーマンス 1204
レーティング 872 → 911 (+39) Highest更新!
段級位 6 級

やったー久しぶりの、水パフォ(コンテスト前、松本駅で親を待つ間、寒くて駅の階段を爆速で登り、すぐ降りた奇行をしたやつが言うな)
解いた問題数は、ABCD4完でした

コンテスト中の流れ

開始3秒

atcoder cliで、コンテストデータを取得する
A問題を見る

開始48秒

A問題を提出

開始60秒

B問題を見る
難しそうに見えたが、案外簡単ですぐACできた

開始3分

C問題を見る
このタイプのクエリは見たことがあったので、その方針でやると決めた

開始26分

C問題をバグり散らかしつつも、AC(0ペナ)

開始27分

D問題を見る
方針がすぐ定まり、実装を始める

開始41分

D問題を提出し、AC
順位表を見てどちらを、解きに行くか、見る
Eは挑戦している人は多いが、ACしている人が少ない
Fはその反対

Fはセグ木っぽかったので、Fのセグ木は解いた試しがないので、Eを解きに行く
そのまま時間は、すぎてゆきコンテストは終了した

使っているライブラリ

github(コミットする時、毎度のようにコンフリクトするため、萎える(pull忘れたりするのが多い))

二分探索ライブラリ

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問題

普通に実装した
first acが13秒でびっくりした(自分は、48秒)

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

S = s()
print(int(S[0]) * int(S[2]))

B問題

最初戸惑ったけど、案外簡単だった
$10^18 < 20!$なので20までを、全探索した

ACコード

X = ii()

for i in range(1, 21):
    if X == factorial(i):
        print(i)
        exit()

C問題

抜けたヘビの長さの総和を位置から引いて出力すればいい
だけど、方針ミスったりで、時間がかかった

ACコード

Q = ii()
L = defaultdict(lambda: (0, 0))
cur = -1
t = 0
m = 0

for _ in [0] * Q:
    l = il()

    if l[0] == 1:
        L[cur + 1] = (L[cur][-1], L[cur][-1] + l[1])
        cur += 1
    elif l[0] == 2:
        m = L[t][-1]
        t += 1
    else:
        print(L[t - 1 + l[1]][0] - m)

D問題

最初にいい方針、引けたので、20分ぐらいでACできた
x = 0の線とy = 0の線を使って四等分して、そのどこかの、区間の答えを4掛ければacできた
その答えを求める計算は、x軸を全探索して、そのxを使って二分探索すればいい
距離はユークリッド距離で求めなければいい(マンハッタン距離使って5分ぐらいロスした)

僕は二分探索で実装したけど、公式解説は尺取り法みたい、まあどっちでもいっか

ACコード

R = ii()
ans = 0

for i in range(R + 1):
    if i + 1 > R:
        continue

    def c(mid):
        return ((i + 0.5) ** 2) + ((mid + 0.5) ** 2) <= R * R

    ans += binary_search(c, R * 2, 0)

print(ans * 4 + 1)

E問題

いろいろ試したけど、ACできなかった
解法は二分探索みたい

さいごに

やっぱ水パフォ出すと、脳汁がヤバいですね(水パフォぎりぎりだろ)
Cで方針ミスったけど、Dで挽回できたので、結果オーライでした

AHCが楽しみです

: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?