A - Divisible
リンク:A - Divisible (atcoder.jp)
概要:配列のうちの倍数であるものについてを出力してね
を順番に見てで割った余りが0であればを計算して空の配列に格納、最後に半角スペース区切りで出力します。
#ABC347 A - Divisible
N, K = map(int, input().split())
A = list(map(int, input().split()))
ans = []
for i in range(N):
if A[i] % K == 0:
ans.append(A[i]//K)
print(*ans, sep = ' ')
提出リンク:提出 #51802776 - AtCoder Beginner Contest 347
ちなみに配列を用意しなくても以下のように末尾を改行ではなく半角スペース(' ')として出力してもいいみたいです。
(末尾に不要な半角スペースがつくので本番では怖くて避けました)
#ABC347 A - Divisible
N, K = map(int, input().split())
A = list(map(int, input().split()))
for i in range(N):
if A[i] % K == 0:
print(A[i]//K, end = ' ')
提出リンク:提出 #51880006 - AtCoder Beginner Contest 347
B - Substring
リンク:B - Substring (atcoder.jp)
概要:文字列の部分文字列としてあり得るものが何種類か出力してね
は最大100文字ということで、1文字取り出す場合は100通り、2文字なら99通り・・・と考えると最大で5000通りくらいで済みそうなので全探索します。
二重for文で始点と終点を指定してスライスで部分文字列を取り出し、セットにaddしていきます。
最後にセットの長さ=部分文字列の種類数を出力します。
初めからセットで持っておくほうが速いですが、初めは配列として最後にセットを取る方法でも問題ないと思います。
#ABC347 B - Substring
S = input()
ans = set()
for i in range(len(S)):
for j in range(1, len(S)+1):
if S[i:j] != '':
ans.add(S[i:j])
print(len(ans))
提出リンク:提出 #51814826 - AtCoder Beginner Contest 347
C - Ideal Holidays
リンク:C - Ideal Holidays (atcoder.jp)
概要:配列がすべて休日になる可能性があるか判定してね
3回WA叩きましたが何とか時間内にACできました。
予定の数、休日と平日なのですべての予定を1日ずつずらして休日に収まるか判定する方法は使えなさそうです。
なのでお気持ちとしては予定のある日が幅に収まるかどうか判定できればよさそうです。
・最初の予定を仮に休日初日として(を計算して)、で割ることで1週間にまとめる
・上記の値を仮にとして、休日であればそのまま、その週の休日からはみ出す場合はを引いて休日の何日前という表現に変える
・この処理を除く回行う中で最大値と最小値を記録しておく
・最大値と最小値の幅が休日の日数に収まればYesを出力する
#ABC347 C - Ideal Holidays
N, A, B = map(int, input().split())
D = list(map(int, input().split()))
E = []
mx = 0
mn = 10**10
for i in range(1,N):
x = (D[i]-D[0])%(A+B)
if x >= A:
x = x-(A+B)
mx = max(mx, x)
mn = min(mn, x)
E.append(x)
if mx - mn < A:
print('Yes')
else:
print('No')
提出リンク:提出 #51865968 - AtCoder Beginner Contest 347
ちなみにWA2回は休日の何日前の考え方を思いつく前で、3回目は出力時の判定をにしていたことが原因でした。
結果
A~Cの3完、WA3回のペナルティ含めて98分でした。
パフォーマンス856で2回連続の緑パフォ、レートは501→548と順調に伸びました。
C問題はもうちょっと早く発想できていれば、D問題はビット演算に慣れていれば解けたのかな?
いずれにしても茶色中位~緑下位の問題に慣れていないので数こなすのがよさそうです。