Study

PythonでAtCorder ABC261 (A,B,C)

先週末のAtCorder ABC261も参加できずでした。

モチベーションあまりないですが、とりあえず問題やってみました。

【A】Intersection

Aなのに難しいと思いました。何回もWA出しました。

パスしたコードはこちら

l1, r1, l2, r2 = map(int, input().split())


if r2 >= r1 >= l2 >= l1:
    print(r1 - l2)
elif r1 >= r2 >= l1 >= l2:
    print(r2 - l1)
elif r2 >= r1 and l1 >= l2:
    print(r1 - l1)
elif r1 >= r2 and l2 >= l1:
    print(r2 - l2)
else:
    print(0)

【B】Tournament Result

普通の全探索って感じがします。特に問題なくパス。

N = int(input())
an = [(input()) for _ in range(N)]


def is_correct():
    for i in range(N):
        for j in range(N):
            if i == j:
                continue

            # condition1
            if an[i][j] == "W":
                if an[j][i] != "L":
                    return False
            # condition2
            if an[i][j] == "L":
                if an[j][i] != "W":
                    return False
            # condition3
            if an[i][j] == "D":
                if an[j][i] != "D":
                    return False
    return True


result = "correct" if is_correct() else "incorrect"
print(result)

【C】NewFolder(1)

普通にやっても計算量がO(2*10**5)っぽいので、特に何のひねりもなくパスできるのではと思って、何の工夫もないコードをとりあえず書いてみました。

そしたらパスできました。

N = int(input())
S = [(input()) for _ in range(N)]

exists_s = {}

for s in S:
    if exists_s.get(s) is not None:
        result = f"{s}({exists_s[s]+1})"
        exists_s[s] += 1
    else:
        result = s
        exists_s[s] = 0
    print(result)

C問題がこれでいいのでしょうか。それともこう思うこと自体、AtCorderに毒されているのでしょうか。

【D】Flipping and Bonus

問題見て、「あ、これDP(動的計画法)だ。できないやつだ。」と思って、早々に諦めました。

DPは昔、カエルの問題で少し勉強したことあるのですが、その類題とかまったくやっていないので、全然身につけられていないです。

どこかで問題解きまくらないといけないと思いながら、いまだにでできてないです。(思うだけで行動に移せないダメ人間・・・)

まとめ

AtCorder ABC261をやってみた感想でした。A,B,Cの3つはできましたが、いつもより簡単だと思いました。

C問題が何のひねりもなく解けるパターンもあるということを知り、C問題だからといって、すぐに諦めたらいけないなと思いました。

今日も参加できそうにありません。ここのところ、週末は飲んでばかりですが、来週は予定ないので来週こそ参加したいです。。。