ABC283(AtCoder Beginners Contest 283)
A〜C問題をPythonで解いてみました。
- コードは雑めです。ゆるしてー
- 競技プログラミングの勉強一切したこと無いので、テクニックは知らないよ。ごめんねー
A問題(diff=8)
a, b = map(int,input().split())
print(a**b)
Pythonでは累乗を**
で書けます
B問題(diff=35)
n = int(input())
a = list(map(int,input().split()))
q = int(input())
# print("a=",a)
for q_i in range(q):
query = list(map(int,input().split()))
# print(f"queriy_{q_i}=",query)
k2 = query[1]-1
if query[0] == 1:
a[k2] = query[2]
elif query[0] == 2:
print(a[k2])
プログラミングに慣れていないとちょっと戸惑ったかもしれませんね。(というか「AtCoderの問題文に」かもしれませんが)
$A_N$の配列を $ Q_Q $ で書き換えつつ、print()で出力していく問題になっているので、落ち着いて理解すれば大丈夫です。
- まず $N$と$A_N$、$Q$を通常通り取得します。
- $Q$の回数分$query$を受け取りながら、$query[0]$ の数値によって処理を分けます(if文の部分ですね)
- $query[0]$が1の場合は$a[k-1]$の部分を$query[2]$で書き換えます
- $query[0]$が2の場合は$print(a[k-1])$します。
という感じですね。
diff=35とA問題のような難易度でしたので解けた方は多かったようです。
C問題(diff=88)
s = input()
pointer = 0
push_count = 0
end_s = len(s)
while pointer < end_s:
if s[pointer] == '0':
if pointer+1 < end_s:
if s[pointer+1] == '0':
pointer += 1
pointer += 1
push_count += 1
print(push_count)
単純化すると 0が連なっている時だけ押した数を減らす
問題です。
私のプログラムでは、pointerは文字列の操作用、push_countはレジ打ち回数カウント用です。
0
が見つかったとき(s[pointer] == '0')だけ、次も0
かどうかを見て(s[pointer+1] == '0')、0
の場合はpointerのみ+1しています。
こちらもdiff=88とA〜B問題のような難易度でしたので解けた方は多かったようです。
感想
ここ何回か、A~C問題めちゃくちゃ簡単ですね。