2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ABC257Python自己満解説

Last updated at Posted at 2022-06-25

ABC257Python自己満解説

あちゃぴです。初めて書いてみます。自己満ですw
とりあえず最初は灰色diffのみ解説していきます。
diffとはAtCoder Problemsのサイトの基準で
diffが400だったらレートが400の人が50%の確率で解くことができるというものです。
なのでdiff<400のものだけを解説します。
問題はこちらです→ABC257の問題
解説用にコードを綺麗に(できるだけ)してます。
ペナとはペナルティーの略でACにならなかったことです。
ペナ率とは全ての提出のうちペナになった提出の割合です。

A問題

計算でO(1)で求めることもできますが、ペナ率が34.56%らしいのでこういったペナをなくすためには愚直にやるのが大事かもしれないです。
この場合だと愚直に得られる文字列を作成して、X番目なので添字はX-1となりそれを出力すればACです。

A.py
N,X=map(int,input().split())
Al="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
S=""
for i in range(26):
    #Al[i]にはA~Zのi番目、Al[i]*NとはAl[i]をN個繋げたものである。
    S+=Al[i]*N
print(S[X-1])

ちなみにコメントの部分を解説すると文字列に数字を掛けるとその文字列をN回繰り返した文字列になります。

example.py
print("Hi!"*10)
example.pyの実行結果
Hi!Hi!Hi!Hi!Hi!Hi!Hi!Hi!Hi!Hi!

B問題

これも愚直にシュミレーションします。
Q回操作してi回目はL[i]について操作します。
L[i]をL[i]-1にしてる理由は添字です。
左からL[i]番目のコマの場所を取得するためにはA[L[i]-1]で取得できます。
「左からL[i]番目のコマが一番右のマスにあるならば何も行わない。」とあるので、A[L[i]-1]がNじゃないときに操作します。それを最初のif文if A[L[i]-1]!=Nで判定してます。
「そうでない時、左からL[i]番目のコマがあるマスの1つ右のマスにコマが無いならば、左からL[i]番目のコマを1つ右のマスに移動させる。1つ右のマスにコマがあるならば、何も行わない。」
1つ右のマスにコマがあるかどうかを判定するには、A[L[i]-1]+1が配列Aの中にに含まれていたら1つ右のマスにコマがある、含まれていなければコマはないとすればよいです。
それは2つ目のif文if not A[L[i]-1]+1 in Aで判定してます。
その後2つの条件にクリアした場合のみA[L[i]-1]+=1A[L[i]-1]のコマを一つ右にずらします。
結果を出力するときにprint(*配列)とやれば配列の中身を空白区切りで出力することができます。演算子と混合しないように気をつけてください。これはよく使うので覚えておくといいでしょう。

B.py
N,K,Q=map(int,input().split())
A=list(map(int,input().split()))
L=list(map(int,input().split()))
for i in range(Q):
  if A[L[i]-1]!=N:
    if not A[L[i]-1]+1 in A:
      A[L[i]-1]+=1
print(*A)

ちなみにprint(*配列)を空白区切りじゃなくて区切りなしや改行区切りにしたいときはsep=何で区切るかとprintのなかに書けば良い。
区切りなしにしたい場合はprint(*配列,sep"")
改行区切りにしたい場合はprint(*配列,sep"\n")
文字"."で区切りたい場合はprint(*配列,sep".")

example.py
S=[1,100,"Hello"]
print(*S)
example.pyの実行結果
1 100 Hello
example2.py
S=[1,100,"Hello"]
print(*S,sep="&")
example2.pyの実行結果
1&100&Hello
example3.py
S=["H","E","L","L","O"]
print(*S,sep="")
example3.pyの実行結果
HELLO
example4.py
S=[1,22,333,4444,55555,666666]
print(*S,sep="\n")
example4.pyの実行結果
1
22
333
4444
55555
666666

以上、自己満解説でした。
間違っているとこがあったら教えてくれたら嬉しいです!

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?