あるぱかのブログ

AtCoder茶(レート578)

トヨタ自動車プログラミングコンテスト2024#3(AtCoder Beginner Contest 344)

A - Spoiler

リンク:A - Spoiler (atcoder.jp)

概要:文字列 Sに2個ある"|"の中身を削除した文字列を出力してね

 Sの先頭から調べていって"|"の位置を記憶します。

後はスライス記法で必要な文字列を出力します。

#ABC344 A - Spoiler
S = input()
pos = []
#|の位置を調べて配列posにメモ
for i in range(len(S)):
    if S[i] == "|":
       pos.append(i)
#print(pos)
print(S[:pos[0]]+S[pos[1]+1:])  

提出リンク:提出 #51026649 - トヨタ自動車プログラミングコンテスト2024#3(AtCoder Beginner Contest 344)

B - Delimiter

リンク:B - Delimiter (atcoder.jp)

概要:個数がわからない配列 Aを順番に投げるので受け取った配列を逆順で出力してね。

 A_Nは0で他は0以外なので0を受け取るまで入力を配列 Aに追加します。

最後に逆順で出力します。

#ABC344 B - Delimiter
A = []
#無限ループで入力受け取り 入力=0で打ち切り
while True:
    a = int(input())
    A.append(a)
    if a == 0:
        break
B = A[::-1]
for i in B:
    print(i)  

提出リンク:提出 #51033581 - トヨタ自動車プログラミングコンテスト2024#3(AtCoder Beginner Contest 344)

C - A+B+C

リンク:C - A+B+C (atcoder.jp)

概要:3つの配列 A, B, Cからひとつずつ取り出して和をとったときに X_iと一致できるか判定してね。

配列 A, B, Cの長さ N, M, Lは最大で100なので全組み合わせを探索しても最悪 10^{6}通りです。

先に A+B+Cを全探索して和をsetに入れておくことで、 X_iが実現可能かを O(1)で判定できます。

(setに対してin演算子の計算量が O(1)のため。listに対しては要素数 Nとすると O(N)になるためTLEします)

計算量は A+B+Cの全探索とクエリの処理で O(NML+Q)で実行時間に間に合います。

#ABC344 C - A+B+C
N = int(input())
A = list(map(int, input().split()))
M = int(input())
B = list(map(int, input().split()))
L= int(input())
C = list(map(int, input().split()))
S = set()
#A+B+Cの計算結果をsetに追加
for i in range(N):
    for j in range(M):
        for k in range(L):
            S.add(A[i]+B[j]+C[k])
#print(S)
Q = int(input())
X = list(map(int, input().split()))
#setの中にXiがあるが判定&出力
for i in range(Q):
    if X[i] in S:
        print('Yes')
    else:
        print('No')  

提出リンク:提出 #51040590 - トヨタ自動車プログラミングコンテスト2024#3(AtCoder Beginner Contest 344)

D - String Bags

リンク:D - String Bags (atcoder.jp)

概要: i個の袋から文字列を取り出して組み合わせて文字列[tex :T]ができるか、できる場合は最小の操作回数を出力してね

近鉄則本を買って少しだけDP勉強したのでDPで解くんだろうなということはわかりました。

ただ問題文をよく読んでいなくて袋は1, 2, …,  i, …,  Nの順番に見ていくこと、取り出した文字列を末尾に付け足すことの2点を見落としていて迷走した結果解けず。

二次元DPで i= i番目までの袋を見る、 j=文字列の完成度(長さ)、 dp_{ij}=コストを管理すればいいのかな?後日解き直したい。

結果

C問題までの3完、時間は11:24で4662位でした。

ついに色変!