A - Spoiler
概要:文字列に2個ある"|"の中身を削除した文字列を出力してね
の先頭から調べていって"|"の位置を記憶します。
後はスライス記法で必要な文字列を出力します。
#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)
概要:個数がわからない配列を順番に投げるので受け取った配列を逆順で出力してね。
は0で他は0以外なので0を受け取るまで入力を配列に追加します。
最後に逆順で出力します。
#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
概要:3つの配列からひとつずつ取り出して和をとったときにと一致できるか判定してね。
配列の長さは最大で100なので全組み合わせを探索しても最悪通りです。
先にを全探索して和をsetに入れておくことで、が実現可能かをで判定できます。
(setに対してin演算子の計算量がのため。listに対しては要素数とするとになるためTLEします)
計算量はの全探索とクエリの処理でで実行時間に間に合います。
#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)
概要:個の袋から文字列を取り出して組み合わせて文字列[tex :T]ができるか、できる場合は最小の操作回数を出力してね
最近鉄則本を買って少しだけDP勉強したのでDPで解くんだろうなということはわかりました。
ただ問題文をよく読んでいなくて袋は1, 2, …, , …, の順番に見ていくこと、取り出した文字列を末尾に付け足すことの2点を見落としていて迷走した結果解けず。
二次元DPで=番目までの袋を見る、=文字列の完成度(長さ)、=コストを管理すればいいのかな?後日解き直したい。
結果
C問題までの3完、時間は11:24で4662位でした。
ついに色変!