1. 競プロする人
  2. AtCoder Beginner Contest 151
2024-08-16 29:56

AtCoder Beginner Contest 151

AtCoder Beginner Contest 151 https://atcoder.jp/contests/abc151 ↓の提出コードを見ながらの聴取を推奨いたします A:https://atcoder.jp/contests/abc151/submissions/50718546 B:https://atcoder.jp/contests/abc151/submissions/50718617 C(解説模写AC):https://atcoder.jp/contests/abc151/submissions/50719101 Atcoderホームページ:https://atcoder.jp/home 2・5・11・17・23日更新予定 #競技プログラミング #Python #podcast


BGMタイトル: Doghouse

作者: Blue Dot Sessions

楽曲リンク: https://freemusicarchive.org/music/Blue_Dot_Sessions/Warmbody/Doghouse/

ライセンス: CC BY-SA 4.0

サマリー

AtCoder Beginner Contest 151では、アルファベットの次の文字を求める問題や、高橋くんがテストの平均点を達成するために必要な点数を計算する問題が扱われています。また、AddCoderコンテストに参加する高橋くんの正答数とペナルティ数を求める問題も含まれています。AtCoder Beginner Contest 151では、複数のプログラミング問題に挑戦し、競技プログラミングのテクニックや戦略が解説されています。

A問題: Next Alphabet
AtCoder Beginner Contest 151、A問題、Next Alphabet、問題文、ZでないA小文字、Cが与えられます。
アルファベット順で、Cの次の文字を出力してください。
Aが出たらB、Yが出たらZを出してください。
これ、なんかやり方があったはずなんですけど、どうだったかな。
Cコールインプットして、プリント、ちょっと試してみましょうか。
チャー、CHRかな。CHRCを1回プリントしてみて、うん、エラーですね。
あ、インプットしてなかった。
STLオブジェクトはチャーでは出せない。
チャーじゃなくてもう1個あったんだよな。何だったかな。調べましょうか。
Python、CHR、ORDかな。ORDだった気がする。
ORDにプラス1してCHRで括ったら、あ、カッコが。
プラス1の位置が間違えてたので、B。YはZ。OKですね。
ORDでアルファベットを書こうと、対応するユニコードの数字が出てきて、それにプラス1して、
そしたら次の文字になるので、それをまたCHRっていう関数で文字に直したという感じです。
ACしたのでB問題いきます。
B問題: アチーブ・ザ・ゴール
B問題。アチーブ・ザ・ゴール。問題文。
高橋くんはN科目のテストを受けます。各テストは経験満点であり、点数はそれぞれ0以上の整数です。
高橋くんはN-1科目のテストをすでに受けており、相番目の科目のテストの点数はAI点でした。
高橋くんの目標はN科目のテストの平均点をM点以上にすることです。
高橋くんが目標を達成するためには、最後のテストで最低何点取る必要があるか出力してください。
達成不可能である場合には代わりにマイナス1を出力してください。
NKMが与えられてA数列が与えられます。
とりあえずコードテスト。
NKMはマップイントインプットスプリットで、Aが与えられます。
Aイコールリストの上をコピペします。
マップイントインプットスプリット。
コードテスト入力例を入れておいて。
入力例。Nが5、Kが10、Mが7、Aは8、10、3、6。
最後のテストで8点を取ると、8たす10たす3たす6たす8、割る5、イコール7。
より平均点は7点となり目標を達成できます。
4文で組めばいいかな。
アベレージABA、ABEイコールサムA割るNかな。
Nマイナス1か。
現状の平均点を出してもらって。
出す必要ないか。
フォーアインレンジ101まで。
サムAプラスアイを括弧で括っておいて。
割るNがK以上だったら、エグジットプリントアイ。
何にも見つからずに100点まで行っても条件をクリアしなかったらプリントマイナス1。
あれ?23が出てきた。
高橋くんが目標を達成するためには最後のテストで最低何点以上。
N科目のテストの平均点。
あ、Mか。
Mだな。
M以上。
Kは何じゃ。
各テストはK点満点。
はいはいはい。
じゃあ101じゃなくてKプラス1ですね。
失礼。
ちゃんと見てなかった。
8。
8だね。
入力例2は0。
0。
入力例3はマイナス1。
はい。
OKです。
クリアしたので提出していきます。
はい、ACしました。
C問題: Welcome to AddCoder
新問題行きます。
新問題。
Welcome to AddCoder。
問題文。
高橋くんはAddCoderのコンテストに参加しています。
このコンテストではN問の問題が出題されます。
高橋くんはコンテスト中にM回の提出を行いました。
I回目の提出はPI番目の問題への提出であり、
結果はSI、ACまたはWAでした。
高橋くんの正答数はACを1回以上出した問題の数です。
高橋くんのペナルティ数は高橋くんがACを1回以上出した各問題において、
初めてACを出すまでに出したWAの数の総和です。
高橋くんの正答数とペナルティ数を教えてください。
NMが10の5乗以下。
とりあえず見てみますか。
NMがあって、
NMイコールマップイントインプットドットスプリット。
入力例をコードテストにコピペしておいて、
NM。
Nが問題の数。
Mが提出の数。
高橋くんが1番目の問題に初めてACを出したのは2回目。
1番目の問題で1回WAを出しています。
高橋くんが2番目の問題に初めてACを出したのは4回目の提出であり、
2番目の問題で1回WAを出しています。
正答数は2。ペナルティも2。
ACとWAをゼロゼロで定義しておいて、
最終的にプリント、AC、WAになるということですね。
辞書かな?
辞書ですね。
DICイコールトゲ括弧して、
ホワインレンジN。
とりあえずどうしようかな。
Aイコール、
NOナンバーと結果、リザルト。
リザルトイコールインプットドットスプリット。
イフ、ディクショナリーの中に
ナンバーがなかったら、ナンバーノットインディクショナリーだったら
初めてなのでディクショナリーのNO。
リザルト、どうしようかな。
プラスでいくか、そのままでいくか。
リザルトを普通にインプットで入れて、
イフ、リザルト1番目がWAだかACだかっていうのが
そもそもディクショナリーになかったら
リザルトイコール1の前にだな。
どうしようかな。
イフ、
リザルトの1番最後マイナス1が
イコールイコールACだった場合、
Cだった場合、
ANDだな。
ANDリザルトノットインディクショナリーだった場合、
ディクショナリーリザルトイコール1。
LIF、リザルトマイナス1イコールイコール
WAだったかつAND、
ACだった場合との場合分けができてないなこれだと。
どうしようかな。
OK、1から作り直します。
やっぱりナンバーとリザルトで分けます。
INPUT.SPLITで
NOイコールINTのインプット。
別にINTにする必要ないんですけど多分。
ディクショナリー
IFっていうかそれはもう作っちゃうか。
FORINRANGE
N、Nじゃないな問題数。
問題数はあってるね、Nだね。
Nだから1からNプラス1までで
DIC
I番目イコール0で初期化しておいて
IF
ディクショナリーの
I番目リストにするか。
ディクショナリーの中にリストを入れよう。
00のリストを入れます。
IF DICのI番目の
0番目が
イコールイコール0かつ
AND
0だった場合でいいか。
0だった場合
IFリザルト
イコールACだったら
ディクショナリーの
Iの0番目が
1になります。
エルス
WAだったらディクショナリーの
I番目の0番目が
1になります。
I番目の1番目ですね。
これだけで良さそうだな。
ACしてなかったら
WAを入れ続けてください。
プラスイコール1だな。
WAはプラスイコール1を押し続けます。
最終的に
KEYと
VALUEで
IN
DIC.ITEM
プリント
KEYとVALUEを
確認してみましょう。
エラーが出たね。
イントインプット
イントナンバー
NO
ディクショナリーNOだね。
I番目じゃなくて
2が0。
なんで?
Nは問題数になっちゃうから
レンジMですね。
大丈夫そうだね。
ACプラスイコール
KEY
ACプラスイコール
VALUEの0番目
WAプラスイコール
VALUEの1番目
最後ACとWAをプリントすれば
22が出ました。
出力例には
10が出たらOK。
ちょっと想定数が多いな。
途中のやつプリントするのをやめときましょうか。
コメントアウトしといて
結果だけ
入力例3は00
OKそうなので提出していきます。
提出
WAが出ました。
なんでや。
WAが7個
ラージがのきのみ不正解ですね。
スモールが1個ミスってるのが何でなんだろう。
C問題
各問題について
その問題ですでにACが出たか
その問題でWAが出た回数を記録しながら
提出を順に並べて処理します。
WAが出た時はその問題のWA回数を1増加
ACが出た時はその問題での初めて
ACじゃなければ何もしません。
初めての場合はたかしくんの正答数が1増え
WAが出た回数だけ増加します。
合ってると思うんだけどな。
ACの数が0の場合
レザルとACだったら
テクショナリーナンバー
合ってそうだけどな。
何が違うんだろう。
ちょっと考えたらわかりそうだな。
C問題
もう一回ちょっとよく見ましょうか。
N問の問題
コンテスト中にM回の提出
N問の問題とM回の提出
いやー
合ってそうだけどな。
レザルとAC
ACじゃなかったら1,2プラス
いやー合ってるでしょう。
DLEじゃないのが気に食わんですね。
ユーザー解説
各問題についてACしているかどうかを保持する配列と
WSを保持する配列を定義しておいて
時系列順にシミュレーションする。
シミュレーション後に2つの配列を見て
正答数とペナルティ数を集計して考えよう。
んー
ではちょっとやってみますか。
コードを見ながらのパイソン変換
社協
101010
ブールイント
ACしたかどうかは
トゥルーフォルスでやってるんだな
この人は。
Iが0からMまで
受け取ってます。
FACだったら
トゥルーにする
0からNまで
えーいや理屈は合ってそうだけどなぁ
だから辞書じゃなくてリストで考えてるんですね
この人は。
それでちょっとやってみましょうか。
ACのリスト
フォルスかける
問題の最大値は
10の5乗
だから101010にしてるのか
真似しよう
でWAが
0×101010
フォーアインレンジ
M
さっきと同じですね。
ナンバーとリザルト
を受け取ります。
インプット.スプリット
ナンバーを
イント
ナンバーにしといて
マイナス1にしとくか
0インデックスにした方が都合良さそう
ACの
ACの
ナンバー番目
がノットだったら
&
WA判定を先にやるべきなのか
ノットAC&
リザルトが
==WAだったら
WAリストの
ナンバー番目に
プラスイコール1
もう一個IF文
IFAC
リザルトが==AC&
ACの
ナンバー番目
ACのナンバー番目
にプラスイコールじゃなくて
2フォーに変更してください
ACの数を数える必要ないですからね
4I
インレンジ
M解でいいか
2フォー
ACI番目
だったらAC
プラスイコール1
最後に出力する
変数を作っていなかったので
OKとNGにしとこう
==00
IFACのI番目
がトゥルーだったら
OKプラスイコール1
そういうことかAC問題
高橋くんのペナルティ数は
全部のWA
カウントしちゃったんだな
OKです
IFACのI番目がトゥルーの場合
この時はじめてOKにもNGにも
プラスするんだ
問題文はちゃんと読まないとですね
プリントOK
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
NG
29:56

コメント

スクロール