0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ABC解説】 ABC380 解説 (B~D)【Python】

Posted at

AtCoder Beginner Contest 380 のB問題〜D問題をPythonで解説します。

提出コード

B問題

問題

1.jpg

画像の文字起こし

1区切りに-入った文字列が与えられます。
区切りごとの1の個数を求めてください。

アプローチ

2.jpg

画像の文字起こし

文字列を」ごとに区切ります。
区切りごとの文字数を出力します。

C問題

問題

3.jpg

画像の文字起こし

0と1からなる文字列があります。
K番目の1の文字列の塊をその直前の0の塊と入れ替えた文字列を出力してください。

アプローチ

4.jpg

画像の文字起こし

0または1ごとに区切ります。
K番目に出てくる1とその直前の要素を交換します。

D問題

問題

5.jpg

画像の文字起こし

文字列Sがあります。この文字列に以下の操作をQ回行った際の、
K番目の文字列を求めてください。
操作
・まず、Sの大文字を小文字に、小文字を大文字に書き換えた文字列をTとする。
・その後、SとTとをこの順に連結した文字列を新たなSとする。

最初の2文字目までは、操作前の文字列です。
3~4文字目は1~2文字目の大文字小文字を反転した文字列です。

最初の4文字目までは、操作前の文字列です。
5~8文字目は1~4文字目の大文字小文字を反転した文字列です。

アプローチ

6.jpg
7.jpg

画像の文字起こし

次の2段階で解きます。
・対象の文字を取得
・大文字小文字が反転されているかを算出
対象の文字を取得
Kを元の文字列数で割った時の余りから対象の文字を特定できます。

大文字小文字が反転されているかを算出
Kを元の文字列数で割った時の商(軽数切捨て)から算出できます。
商を2進数にした時の1の個数が偶数なら元の文字列のまま、奇数なら反転です。

反転を2進数で判定できる理由
1の個数を反転の回数としてみなせます。なので、奇によって反転かを判定できます。
5~6文字目は1~2文字目を反転した文字列が来ています。

7~8文字目は3~4文字目を反転した文字列が来ています。
つまり、元の文字列から反転が2回されているので、元の文字列が来ます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?