A問題
解答
1 2 3 4 5 6 7 8 |
n = int(input()) A = list(map(int, input().split())) _ = A[0] for i in A: if _!= i: print("No") exit() print("Yes") |
B問題
方針
- 3と2で割り算を繰り返し、割り切れたらYesを返す
解答
1 2 3 4 5 6 7 8 9 10 11 12 |
n = int(input()) #3で割り切れる限り割り続ける while n%3 == 0: n //= 3 #2で割り切れる限り割り続ける while n%2 == 0: n //= 2 #最後の計算時の商が1なら割り切れたことになるのでYesを返す if n==1: print("Yes") else: print("No") |
C問題
方針
- 文字列TとSを左端から順に1文字ずつ照合する。
- 不一致が1文字以内までは許容し、最後まで照合ができるかをfor文で確認する
- TとS内の文字が不一致の場合、長さが同じならそれぞれインデックスを1つ進め、長さが異なる場合はTとSの長い方を一文字進める
- TとSの長さが2文字以上の場合はFalse
- 1文字以内の不一致のみで、各文字が一致している文字列Sの数と、何番目に入力されたかを記録して最後に出力する
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#tの方が長い文字列である必要がある def check(shoter, longer) -> bool: #sの方が短い場合は入れ替える if len(shoter) > len(longer): return check(longer, shoter) #問題文よりSの文字列の長さがTの文字列の長さと2文字以上違うことがあるので、この場合はFalseを返す if len(shoter) < len(longer) - 1: return False i,j,miss = 0,0,0 #長さが短い方の文字列の長さだけ繰り返す while i < len(shoter): #文字が一致した場合は両方のインデックスを1つすすめる if shoter[i] == longer[j]: i += 1 j += 1 else: miss += 1 #一致しない文字が2つめになったらFalseを返す if miss > 1: return False #文字列の長さが同じ場合はiも1つすすめる if len(shoter) == len(longer): i += 1 #longerの方が1文字長かった場合はjのみ1つ進める。これでインデックスは一致する j += 1 return True n, t = input().split() answer = [] for i in range(int(n)): s = input() if check(s,t): answer.append(i+1) print(len(answer)) print(" ".join(map(str, answer))) |
補足・参考・感想
■記事一覧
コメント