📝
AtCoder Beginner Contest 283 レポート
概要
ABCD4完でした.本当にしょうもない結果で書くことがないです.
ABC283
- コンテスト名: ユニークビジョンプログラミングコンテスト2022 冬(AtCoder Beginner Contest 283)
- 順位: 1850th / 8272
- パフォーマンス: 1075
- レーティング: 1268 → 1250 (-18)
- コンテスト参加回数: 68
A - Power
A - 問題
A - 解法
特筆事項なし.
A - ACコード
def main():
A, B = map(int, input().split())
ans = pow(A, B)
print(ans)
if __name__ == '__main__': main()
B - First Query Problem
B - 問題
長さ
-
1 k x
: をA_k に更新する.x -
2 k
: を出力する.A_k
B - 解法
本当に特筆事項なし.
B - ACコード
def main():
N = int(input())
A = list(map(int, input().split()))
Q = int(input())
queries = [list(map(int, input().split())) for _ in range(Q)]
for q in queries:
if q[0] == 1: A[q[1]-1] = q[2]
else: print(A[q[1]-1])
if __name__ == '__main__': main()
C - Cash Register
C - 問題
00
, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
を組み合わせて整数
C - 解法
本当に本当に特筆事項なし.
00
を優先使用するところでちょっとしたミスをして1WA.
C - ACコード
def main():
S = input()
idx = 0
ans = 0
while idx < len(S):
if idx + 1 < len(S) and S[idx:idx+2] == '00': idx += 2
else: idx += 1
ans += 1
print(ans)
if __name__ == '__main__': main()
D - Scope
D - 問題
英小文字,(
, )
からなる良い文字列
-
が英小文字ならば,S_i set.add(S_i)
する.ただし,set
内にS_i
がすでに存在する場合は終了. -
がS_i (
ならば何もしない. -
がS_i )
ならば,良く対応する(
との間にある全ての英小文字S_j
についてset.remove(S_j)
する.
D - 解法
英小文字の位置をdict()
で管理し,すでにある英小文字が出てきたら終了.
(
のインデックスと位置をlist()
で管理しつつ,cnt = 0
と初期化したカウンタについて,(
が出てきたらcnt++
する.
)
が出てきたらcnt--
し,cnt
が良く対応する(
の位置となるのでdict()
の要素を処理.
良く対応する(
の判定について1WAした挙句嘘解法を通した.
D - ACコード(嘘解法)
def main():
S = input()
dic = {}
arr_l, cnt_r = [], 0
for i, si in enumerate(S):
if si == '(': arr_l.append(i)
elif si == ')':
delete = set()
for k, v in dic.items():
if arr_l[cnt_r] < v: delete.add(k) # 嘘解法,2WA目で焦っていたとはいえ意味がわからない……
for k in delete: del dic[k]
cnt_r += 1
else:
if si in dic:
ans = 'No'
break
else: dic[si] = i
else: ans = 'Yes'
print(ans)
if __name__ == '__main__': main()
D - ACコード(追試)
def main():
S = input()
dic = {}
arr_l, cnt = [], 0
for i, si in enumerate(S):
if si == '(':
cnt += 1
arr_l.append(i)
elif si == ')':
cnt -= 1
delete = set()
for k, v in dic.items():
if arr_l[cnt] < v: delete.add(k)
for k in delete: del dic[k]
else:
if si in dic:
ans = 'No'
break
else: dic[si] = i
else: ans = 'Yes'
print(ans)
if __name__ == '__main__': main()
E - Don't Isolate Elements
解法は何ら複雑なこともないし,思いついていたにも関わらず80分かけてDPが実装できず.
感想
採点ミスで
E問題がシンプルに実装が重めなだけで青難易度だったのが印象的ですね.
春からエンジニアで働くのに,アルゴリズム力を鍛えるよりもよっぽど実装力が必要だと思います.鍛えていきたい……
Discussion