ABC327の回
ABC完。
これまでの最高パフォーマンスでした。
A-問題
問題文
英小文字からなる長さ N の文字列 S が与えられます。
S の中で a と b が隣接する箇所があれば Yes を、なければ No を出力してください。(a と b の順序は問いません。)
ポイント
ab の並びとba の並びの両方を判定するロジックが必要でした
A.py
N = int(input())
S = str(input())
for i in range(N-1):
# 並びが ab の場合
if S[i] == 'a' and S[i+1] == 'b':
print("Yes")
exit()
# 並びが ba の場合
elif S[i] == 'b' and S[i+1] == 'a':
print("Yes")
exit()
print("No")
A2.py
#【別解】文字列Sの中に "ab" "ba" が存在するかのシンプルな書き方
N = int(input())
S = str(input())
if "ab" in S:
print("Yes")
exit()
if "ba" in S:
print("Yes")
exit()
print("No")
B-問題
問題文
整数 B が与えられます。
AのA乗 = B であるような正の整数 A が存在するならばその値を、存在しないならば -1 を出力してください。
ポイント
乗数なので計算結果が大きくなるので、Bをオーバーする値は探索対象から除外する。
B.py
B = int(input())
ans = 0
i = 1
# while文で、Bの値をオーバするまでpow関数で計算した
while ans <= B:
ans = pow(i,i)
if ans == B:
print(i)
exit()
else:
i += 1
print(-1)
C-問題
問題文
ポイント
set の要素数で、条件の範囲を1から9まで埋めているかを判定
3 x 3 の範囲の判定では、時間をかければより賢いコードがかけるかもしれないが、時間内の回答を優先して力技で記述しました。
C.py
<入力例>
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8
A = [input().split() for i in range(9)]
# 横一列を1から9まで埋めているかを判定
for i in range(9):
ST = set()
for j in range(9):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
# 縦一列を1から9まで埋めているかを判定
for i in range(9):
ST = set()
for j in range(9):
ST.add(A[j][i])
if len(ST) != 9:
print("No")
exit()
# 3 x 3 の範囲指定は、ベタ書きしてクリアした。
ST = set()
for i in range(0,3):
for j in range(0,3):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(0,3):
for j in range(3,6):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(0,3):
for j in range(6,9):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(3,6):
for j in range(0,3):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(3,6):
for j in range(3,6):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(3,6):
for j in range(6,9):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(6,9):
for j in range(0,3):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(6,9):
for j in range(3,6):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
ST = set()
for i in range(6,9):
for j in range(6,9):
ST.add(A[i][j])
if len(ST) != 9:
print("No")
exit()
print("Yes")