0
0

ABC364振り返り

Last updated at Posted at 2024-07-27

前回の振り返り

今日はABC開催日だったので参加結果を振り返る

今回はA,B,Cの3完、前回、前々回とA,B,Dの3完だったの今度こそ4完したかったけど残念でした

こんかいは、甘い、しょっぱい、のパラメータをもった量に関する問題が複数あった。(A,C,E)

  • 今回のABCのメインテーマ(?)

A

甘いの食べたらフラグを立てて、また甘いのを食べたとき、それが最後じゃなければNo

ソースコード

main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def main():
    N = rI()
    swt = False
    for i in range(N):
        S = rS()
        if S == "sweet":
            if swt and i < N-1:
                print("No")
                break
            swt = True
        else:
            swt = False
    else:
        print("Yes")

if __name__ == '__main__':
    main()

B

単純に動かせばいいけど実装に時間食った…

ソースコード

main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

d = {
    "L": ( 0,-1),
    "R": ( 0, 1),
    "U": (-1, 0),
    "D": ( 1, 0),
}

def main():
    H, W = rLI()
    si, sj = rLI()
    si -= 1
    sj -= 1 
    
    L = [[False] * W for _ in range(H)]
    for i in range(H):
        S = rS()
        for j, s in enumerate(S):
            if s == "#":
                L[i][j] = True 
    X = rS()
    for i,move in enumerate(X,start=1):
        di, dj = d[move]
        if si+di < 0 or si+di >= W or sj+dj < 0 or sj+dj >= W:
            continue
        elif L[si+di][sj+dj]:
            continue
        else:
            si+=di
            sj+=dj
    print(f"{si+1} {sj+1}")
if __name__ == '__main__':
    main()

C

一番甘いものから食べる高橋くんと一番しょっぱいものから食べる高橋くんのどっちがダウンするかデスゲームするだけ。

一番の甘い、しょっぱいはheapqを最大値系にしたやつを使う。

ソースコード

main.py
import sys
import heapq
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)



class Maxheapq:
    def __init__(self):
        self.q = []

    def push(self, v):
        heapq.heappush(self.q, v * -1)

    def pop(self):
        return heapq.heappop(self.q) * -1

    def get(self):
        return self.q[0] * -1

    def values(self):
        for _q in self.q:
            yield -_q

def main():
    N, x, y = rLI()
    A = rLI()
    B = rLI()
    
    qA = Maxheapq()
    qB = Maxheapq()
    for a,b in zip(A,B):
        qA.push(a)
        qB.push(b)
    
    swt = 0
    sal = 0
    
    for i in range(N):
        swt += qA.pop()
        sal += qB.pop()
        if swt>x or sal>y:
            print(i+1)
            break
    else:
        print(N)
if __name__ == '__main__':
    main()

D

E問題がCの応用で行けそうなきがしたのでスルーしちゃった。

E

C問題の逆かな?とかおもいこっちから実装。とりあえずDPで行けるだろうとか思ったけど普通に撃沈…こんなんだったらD問題悩んでたほうがよかったかもしれない。

F

グラフの問題はまだできません定期

G

グラフの問題は(ry

まとめ

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