0
0

ABC366振り返り

Posted at

前回の振り返り

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

今回はABCDの4完だがで誤字って1ペナを食らったorz
ケアレスミスには気をつけよう。

A

片方が過半数以上か判定するだけ、
判定条件の変数をタイポしてWAもらった。

ソースコード

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, T, A = rLI()
    
    M = (N-1)// 2 +1
    
    ans = T >= M > 0 or A >= M > 0
    
    print("Yes" if ans else "No")
    
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)

def main():
    N = rI()
    S = [rS() for _ in range(N)][::-1]
    L = [len(s) for s in S]
    M = max(L)
    for j in range(M):
        ans = []
        for i in range(N):
            c = "*"
            if j < L[i]: 
                c = S[i][j]
            ans.append(c)
        k = len(ans) - 1
        while ans[k] == "*": k -= 1
        print("".join(ans[:k+1]))
    
if __name__ == '__main__':
    main()

C

defaultdictで初期値を0に設定、ここでボールの個数を管理
カウンタ変数を用意して、
追加したい変数の個数が0ならカウンタ変数を+1
削除する変数の個数が1ならカウンタ変数を-1
3のクエリが来たらカウンタ変数の値を出力

ソースコード

main.py
from collections import defaultdict
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():
    Q = rI()
    d = defaultdict(lambda: 0)
    c = 0
    for _ in range(Q):
        q = rLI()
        if q[0] == 1:
            if d[q[1]] == 0:
                c += 1
                d[q[1]] = 1
            else:
                d[q[1]] += 1    
        if q[0] == 2:    
            if d[q[1]] == 1:
                c -= 1
                del d[q[1]]
            else:
                d[q[1]] -= 1
        if q[0] == 3:
            print(c)
    
if __name__ == '__main__':
    main()

D

累積和の3次元バージョンだが、
どうすればいいかイメージがつかなかったので、
2次元累積和までやってX軸は順番に足し込んだ。

しかしこの2次元累積和を実装するまでに1時間消費

ソースコード

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()
    A = [[rLI() for _ in range(N)] for _ in range(N)]
    S = [[[0] * (N+1) for _ in range(N+1)] for _ in range(N+1)]
        
    for i in range(1, N+1):
        for j in range(1, N+1):
            for k in range(1, N+1):
                S[i][j][k] = A[i-1][j-1][k-1]
                if k > 1:
                    S[i][j][k] += S[i][j][k-1]
    # for i in range(1,N+1):
    #     for j in range(1,N+1):
    #         err(f"{i=}, {j=}, {S[i][j]}")


    for i in range(N+1):
        for k in range(N+1):
            for j in range(1, N+1):
                S[i][j][k] += S[i][j-1][k]

    # err("-"*100)
    # for i in range(1,N+1):
    #     for j in range(1,N+1):
    #         err(f"{i=}, {j=}, {S[i][j]}")
                
    Q = rI()
    for _ in range(Q):
        lx,rx,ly,ry,lz,rz = rLI()
        ans = 0
        # err(f"{lx=},{rx=}")
        # err(f"{ly=},{ry=},{lz=},{rz=}")
        for i in range(lx,rx+1):
            # err(_,i)
            # err(S[i][ry][rz] + S[i][ly-1][lz-1] - S[i][ly-1][rz] - S[i][ry][lz-1])
            # err(S[i][ry][rz], S[i][ly-1][lz-1], S[i][ly-1][rz], S[i][ry][lz-1])
            ans += S[i][ry][rz] + S[i][ly-1][lz-1] - S[i][ly-1][rz] - S[i][ry][lz-1]
        print(ans)
        
if __name__ == '__main__':
    main()

E

2次元座標軸の図がでてきてそっ閉じ。
しゃくとり法を使えばよかったのね…

F

ソートしてDPかな?までは合ってた。

G

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

まとめ

今回は2回目の4完だがAで一回WAを出したのと、
2次元累積和の実装に時間を書けてしまったのが辛い所。

累積和の練習とケアレスミスがないようにしていきたい。

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