#--------- 入力例 ----------- N = 7# 草の数 S = ['A', 'A', 'B', 'A', 'B', 'B'] # 隣合う草の高低情報 #---------------------------- # 配列の準備 ret1 = [ None ] * N ret2 = [ None ] * N
# 1からNへ'A'の連続数を数える sa = 1# 'A'の連続回数 ret1[0] = 1 for i inrange(N - 1): if S[i] == 'A': sa += 1 if S[i] == 'B': sa = 1 ret1[i + 1] = sa print('ret1', ret1)
# Nから1へ'B'の連続数を数える sa = 1# 'B'の連続回数 ret2[N - 1] = 1 for i inreversed(range(N - 1)): if S[i] == 'A': sa = 1 if S[i] == 'B': sa += 1 ret2[i] = sa print('ret2', ret2)
# 連続数の多いほうを選ぶ ret3 = [max(a, b) for a, b inzip(ret1, ret2)] print('ret3', ret3)
#--------- 入力例1 --------- N = 15# 要素数 X = 47# 探す要素 A = [8, 13, 17, 19, 24, 27, 33, 37, 41, 43, 47, 53, 59, 61, 68] #--------- 入力例2 --------- # N = 10 # 要素数 # X = 80 # 探す要素 # A = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] #---------------------------- # 整数 x が何番目に存在するかを返す関数 defsearch(x, A): L = 0 R = N - 1 while L <= R: M = (L + R) // 2 if x < A[M]: print('求める要素{}は、要素{}({}番目)より小さい'.format(x, A[M], M)) R = M - 1 if x == A[M]: print('求める要素{}は、要素{}({}番目)と同じ'.format(x, A[M], M)) return M if x > A[M]: print('求める要素{}は、要素{}({}番目)より大きい'.format(x, A[M], M)) L = M + 1 return - 1# 整数 x が存在しない(注:この問題の制約で -1 が返されることはない)