ABC162 復習
A問題
文字列に7が含まれているかどうかです。
pythonなら、forとifが書ければ解けますね。
n = input() for i in n: if i == '7': print('Yes') break else: print('No')
B問題
かの有名なFizzBuzzですね。問題では数値の和を出力するように少し変わっていました。
これも同じく、ifとfor、あとは剰余の求め方がわかれば解けますね。
n = int(input()) ans = 0 for i in range(1, n + 1): if i % 3 == 0 and i % 5 == 0: continue elif i % 3 == 0: continue elif i % 5 == 0: continue else: ans += i print(ans)
C問題
最大公約数の問題ですね。これ、解けませんでした・・。
というより難しく考えすぎてしまいました。愚直に書くと、N3の計算量なのでなんらかショートカットを踏む問題なのかと思いきや、普通に3重ループで解けるんですね・・。
制約はちゃんと見ましょう。(戒め)
import math k = int(input()) ans = 0 for i in range(1, k + 1): for j in range(1, k + 1): temp = math.gcd(i, j) for l in range(1, k + 1): ans += math.gcd(l, temp) print(ans)
D問題
さて、ここからはいつものように全然わからん問題です。
解法を見てもわかるように、問題文そのまま書こうとするとダメなやつですね。
今回で言えば条件に合致する個数を調べるというより、2つある条件のうち、1つに合致するものから、2つ目の条件に合致しない個数を引くという、ちょっとした発想の転換が必要でした。
まだまだ修行が足りんです。
N = int(input()) S = input() r = S.count('R') g = S.count('G') b = S.count('B') count = 0 for i in range(N): for j in range(i + 1, N): #2つ目の条件であるj - i ≠ k - jを満たさない数を求める #j - i = k - j の場合を調べる必要があるので、k = j + j - iとなる k = j + j - i if k >= N: break #2つ目の条件に合致しないことがi, j, k より明らかなので、1目の条件に合致しなければダメ if S[i] != S[j] and S[j] != S[k] and S[i] != S[k]: count += 1 #1つ目の条件に合致する総数はr * g * bなので、2つ目の条件に合致しない数を引けば答えとなる print((r * g * b) - count)
E問題
解説見てもさっぱりわからん。今回はここまで。