問題はこちら
4完
A
様々な解法が回答に乗っていて面白い。|で3分割し、1・3番目のみ出力 or |の間を正規表現で置換する方法が早そうな気がした。
S = input() l = [] for i in range(len(S)): if S[i] == "|": l.append(i) print(S[:l[0]] + S[l[1]+1:])
B
l = [] while True: A = int(input()) l.append(A) if A == 0: break for i in l[::-1]: print(i)
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())) Q = int(input()) X = list(map(int, input().split())) # ありうる和を先に計算し、Set型で保持する set_sum = set() for a in A: for b in B: for c in C: set_sum.add(a+b+c) list_sum = sorted(list(set_sum)) # print(list_sum) # 二分探索で、xがlist_sum内にあるかを確認する。(この問題では不要らしい) def serch_from_list(x, list_sum): L = 0 R = len(list_sum)-1 while R-L > 0: M = (L+R)//2 if list_sum[M] < x: L = M+1 else: R = M return L # for x in X: if list_sum[serch_from_list(x, list_sum)] == x: print("Yes") else: print("No")
D
BFS(幅優占探索)かと思って解いていたが、よく考えてみたら計算量が間に合わないため絶対違う。要反省。
E
ある要素の前後が何かを辞書で保持しておく。
N = int(input()) A = ["s"] + list(map(int, input().split())) + ["g"] Q = int(input()) dict_ascending = {} dict_descending = {} for i in range(N+1): a,b = [A[i], A[i+1]] dict_ascending[a] = b dict_descending[b] = a # print(dict_ascending) # print(dict_descending) # for _ in range(Q): q = list(map(int, input().split())) if q[0] == 1: x,y = q[1:] z = dict_ascending[x] dict_ascending[x] = y dict_ascending[y] = z dict_descending[z] = y dict_descending[y] = x else: x = q[1] y = dict_ascending[x] w = dict_descending[x] dict_ascending[w] = y dict_descending[y] = w # # print(dict_ascending) result = ["s"] while result[-1] != "g": result.append(dict_ascending[result[-1]]) print(*result[1:-1])
F