A問題
findで2番目のインデックスを調べる方法調べてたら少し時間かかった。
#Sは文字列、開始インデックスを1回目に見つけたインデックスにすれば2回目のインデックスを返す
S.find("検索文字",開始インデックス+1)
B問題
不特定回数繰り返す⇒無限ループ、特定の条件でbreak
知らなかったので調べるのに時間かかった。
numbers = []
while True:
A = int(input())
numbers.append(A)
if A == 0:
break
numbers.reverse()
for A in numbers:
print(A)
C問題
なにも考えずに4重ループさせたらTLE
A+Bの結果には重複があるので、あらかじめA+Bの結果を集合で用意しておくことで計算量を削る。
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()))
Q = int(input())
X = list(map(int, input().split()))
AB_sums = set(j + u for j in A for u in B)
for x in X:
found = False
for k in C:
if x - k in AB_sums:
print("Yes")
found = True
break
if not found:
print("No")
D問題
全探索したら絶対TLEするので、工夫が必要そうだなーと。
多分幅優先探索使えば解ける。ただ練習不足でコード書けなかった。
E問題
愚直に解いたけど、TLE。
これは全く方針分からなかったから解説読んで考えます。
N = int(input())
A = list(map(int,input().split()))
Q = int(input())
for _ in range(Q):
q = list(map(int,input().split()))
q_type = q[0]
x = q[1]
if q_type == 1:
y = q[2]
x_index = A.index(x)
A.insert(x_index + 1,y)
elif q_type == 2:
A.remove(x)
print(' '.join(map(str, A)))
まとめ
頻出のアルゴリズム覚えてたらD問題は解けてたかもだけど、
3月中はA~C問題を解くスピードに焦点当てて勉強します。