ユニークビジョンプログラミングコンテスト2022 夏(AtCoder Beginner Contest 268) A~C問題の解説記事です。
灰色~茶色コーダーの方向けに解説しています。
その他のABC解説、動画などは以下です。
更新時はツイッターにて通知します。
https://twitter.com/AtCoder4
ユニークビジョン様について
本コンテストはユニークビジョン株式会社様が主催されています。
A - Five Integers Dif:16
重複のない整数を順に数えていきます。
BとAが違うなら+1
CとA,Bが違うなら+1
DとA,B,Cが違うなら+1
EとA,B,C,Dが違うなら+1
「○○でない」という条件は「!=」で表します。
入力の受け取り、出力がわからない方は以下の記事を参考にしてください。
【提出】
# 入力の受け取り
A,B,C,D,E=map(int,input().split())
# 重複のない整数をカウント
count=1
# BとAが違うなら
if B!=A:
# カウントにプラス1
count+=1
# CとA,Bが違うなら
if C!=A and C!=B:
# カウントにプラス1
count+=1
# DとA,B,Cが違うなら
if D!=A and D!=B and D!=C:
# カウントにプラス1
count+=1
# EとA,B,C,Dが違うなら
if E!=A and E!=B and E!=C and E!=D:
# カウントにプラス1
count+=1
# カウントの値を出力
print(count)
B - Prefix? Dif:26
pythonでは文字列の先頭を0文字目、次を1文字目、...と数えます。
Tの前からx文字目まではT[:x+1]と書きます。(T[:x]ではありません!)
例えばT="atcoder"であれば前から3文字目はT[:4]="atco"になります。
よってS=T[:(Sの文字数)]が成り立っていればSはTの接頭辞であると判定できます。
【提出】
# 入力の受け取り
S=input()
T=input()
# S=Tの先頭から(Sの長さ) ならば
if S==T[:len(S)]:
# 「Yes」を出力
print("Yes")
# そうでなければ
else:
# 「No」を出力
print("No")
C - Chinese Restaurant Dif:676
以下の例で考えます。
N:6
p:2 0 1 4 3 5
まず初期状態における各料理と人の距離を確認します。
ここでいう距離とは「反時計回りに何回転すれば目の前に料理がくるか」を表します。
人0と料理0の距離:5(料理0(p1)の位置は1 0-1=-1 (-1)%6=5)
人1と料理1の距離:5(料理1(p2)の位置は2 1-2=-1 (-1)%6=5)
人2と料理2の距離:2(料理2(p0)の位置は0 2-0=2 2%6=2)
人3と料理3の距離:5(料理3(p4)の位置は4 3-4=-1 (-1)%6=5)
人4と料理4の距離:1(料理4(p3)の位置は3 4-3=1 1%6=1)
人5と料理5の距離:0(料理5(p5)の位置は5 5-5=0 0%6=0)
初期状態の時点で料理との距離が5,0,1の人は喜びます。よって人0,1,3,4,5の5人が喜びます。
一回転してみましょう。
人0と料理0の距離:4(料理0の位置は2 0-2=-2 (-2)%6=4)
人1と料理1の距離:4(料理1の位置は3 1-3=-2 (-2)%6=4)
人2と料理2の距離:1(料理2の位置は1 2-1=1 1%6=1)
人3と料理3の距離:4(料理3の位置は5 3-5=-2 (-2)%6=4)
人4と料理4の距離:0(料理4の位置は4 4-4=0 0%6=0)
人5と料理5の距離:5(料理5の位置は0 5-0=5 5%6=5)
1回転させると距離は全て-1されます。
例えば初期状態で距離がそれぞれ2,3,4の料理があったとするとこれらは適当な回転によって距離5,0,1にできます。
初期状態での距離を計算を計算し、距離0~5の料理がそれぞれいくつあるか数えます
距離(0,1,2)の料理の個数合計を計算(1回転によって距離(5,0,1)にできる)
距離(1,2,3)の料理の個数合計を計算(2回転によって距離(5,0,1)にできる)
距離(2,3,4)の料理の個数合計を計算(3回転によって距離(5,0,1)にできる)
距離(3,4,5)の料理の個数合計を計算(4回転によって距離(5,0,1)にできる)
距離(4,5,0)の料理の個数合計を計算(5回転によって距離(5,0,1)にできる)
距離(5,0,1)の料理の個数合計を計算
こうして計算した中で最も大きいものが答えです。
一般には距離0~(N-1)の料理がそれぞれいくつあるか数え、
距離(0,1,2)の料理の個数合計を計算(1回転によって距離(N-1,0,1)にできる)
距離(1,2,3)の料理の個数合計を計算(2回転によって距離(N-1,0,1)にできる)
距離(2,3,4)の料理の個数合計を計算(3回転によって距離(N-1,0,1)にできる)
...
距離(N-2,N-1,0)の料理の個数合計を計算((N-1)回転によって距離(N-1,0,1)にできる)
距離(N-1,0,1)の料理の個数合計を計算
と計算します。
【提出】
# 入力の受け取り
N=int(input())
p=list(map(int,input().split()))
# 料理の場所を記録
indx=[0]*N
# i=0~(N-1)
for i in range(N):
# 料理piは位置iにある
indx[p[i]]=i
# 距離
dist=[0]*N
# i=0~(N-1)
for i in range(N):
# 距離を計算
dist[i]=(i-indx[i])%N
# 距離ごとの料理の個数
count=[0]*N
# i=0~(N-1)
for i in range(N):
# 距離iの料理の個数をカウント
count[dist[i]]+=1
# 答え
ans=0
# i=1~N
for i in range(N):
# 距離(0,1,2)の料理の個数合計を計算(1回転によって距離(N-1,0,1)にできる)
# 距離(1,2,3)の料理の個数合計を計算(2回転によって距離(N-1,0,1)にできる)
# 距離(2,3,4)の料理の個数合計を計算(3回転によって距離(N-1,0,1)にできる)
# ...
# 距離(N-2,N-1,0)の料理の個数合計を計算((N-1)回転によって距離(N-1,0,1)にできる)
# 距離(N-1,0,1)の料理の個数合計を計算
ans=max(ans,count[i]+count[(i+1)%N]+count[(i+2)%N])
# 答えの出力
print(ans)
【広告】
『AtCoder 最速で緑になる 基礎・典型50問詳細解説』
ABC201~250から基礎・典型問題50問をとてつもなく丁寧かつ詳細に解説した本(kindle)、pdf(booth)です。
灰色、茶色コーダーにおすすめ!
値段:100円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/dp/B0BBB7RKTP
【booth(pdf)】
https://booth.pm/ja/items/4102300
冒頭5問をサンプルとして無料公開しています
https://qiita.com/sano192/items/6361ed72106cb6dd5843
『AtCoder 凡人が『緑』になるための精選50問詳細解説』
AtCoderで緑になるための典型50問をひくほど丁寧に解説した本(kindle)、pdf(booth)を販売しています。
値段:100円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/gp/product/B09C3TPQYV/
【booth(pdf)】
https://sano192.booth.pm/items/3179185
1~24問目まではサンプルとして無料公開しています
https://qiita.com/sano192/items/eb2c9cbee6ec4dc79aaf
『AtCoder ABC201~225 ARC119~128 灰・茶・緑問題 超詳細解説 AtCoder 詳細解説』
ABC201~225、ARC119~128 の 灰・茶・緑DIfficulty問題(Dif:0~1199) を解説しています。
とにかく 細かく、丁寧に、具体例を豊富に、実装をわかりやすく、コードにコメントをたくさん入れて 解説しています。
サンプルを5問分公開しています
https://qiita.com/sano192/items/3258c39988187759f756
Qiitaにて無料公開している『ものすごく丁寧でわかりやすい解説』シリーズをベースにしていますが、 【キーワード】【どう考える?】【別解】を追加 し、 【解説】と【実装のコツ】を分ける ことでよりわかりやすく、 具体例や図もより豊富に 書き直しました。
Qiitaには公開していない ARC119~128の灰・茶・緑DIfficulty問題も書き下ろし ています。
値段:300円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/dp/B09TVK3SLV
【booth(pdf)】
https://booth.pm/ja/items/3698647
ARC119~128の部分のみ抜粋した廉価版 もあります。
値段:200円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/dp/B09TVKGH17/
【booth(pdf)】
https://sano192.booth.pm/items/3698668
『AtCoder ABC226~250 ARC129~139 灰・茶・緑問題 超詳細解説 AtCoder 詳細解説』
ABC226~250、ARC129~139 の 灰・茶・緑DIfficulty問題(Dif:0~1199) を解説しています。
とにかく 細かく、丁寧に、具体例を豊富に、実装をわかりやすく、コードにコメントをたくさん入れて 解説しています。
サンプルを4問分公開しています
https://qiita.com/sano192/items/f8f09ea769f2414a5733
Qiitaにて無料公開している『ものすごく丁寧でわかりやすい解説』シリーズをベースにしていますが、 【キーワード】【どう考える?】【別解】を追加 し、 【解説】と【実装のコツ】を分ける ことでよりわかりやすく、 具体例や図もより豊富に 書き直しました。
Qiitaには公開していない ARC129~139の灰・茶・緑DIfficulty問題も書き下ろし ています。
値段:300円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/dp/B0B7G13QMS
【booth(pdf)】
https://sano192.booth.pm/items/4025713
ARC129~139の部分のみ抜粋した廉価版 もあります。
値段:200円(Kindle Unlimited対象)
【kindle】
https://www.amazon.co.jp/dp/B0B7G337YF
【booth(pdf)】
https://sano192.booth.pm/items/4025737
『Excelでリバーシを作ろう!! マクロ、VBAを1から学ぶ』
Excelのマクロ(VBA)で「三目並べ」「マインスイーパー」「リバーシ」を作る解説本です!
マクロ、VBAが全くわからない人でも大丈夫! 丁寧な解説と図でしっかり理解しながら楽しくプログラミングを学ぶ事ができます!
値段:300円(Kindle Unlimited対象)
サンプルとして「準備」~「三目並べ」を無料公開しています。
https://qiita.com/sano192/items/9a47e6d73373d01e31fb
【kindle】
https://www.amazon.co.jp/dp/B09XLM42MW
【booth(pdf】
https://sano192.booth.pm/items/3785312