1. 競プロする人
  2. AtCoder Beginner Contest 292
2024-01-23 11:12

AtCoder Beginner Contest 292

AtCoder Beginner Contest 292

https://atcoder.jp/contests/abc292


↓の提出コードを見ながらの聴取を推奨いたします
A:https://atcoder.jp/contests/abc292/submissions/46505485

B:https://atcoder.jp/contests/abc292/submissions/46505576


Atcoderホームページ:https://atcoder.jp/home

サマリー

AtCoder Beginner Contest 292回目のA問題では、与えられた小文字のみからなる文字列Sから、各文字を大文字に変換した文字列Tを出力します。B問題では、1からNまでの選手がサッカーの試合をし、イベントに応じてイエローカードやレッドカードが提示されるルールがあります。

AtCoder Beginner Contest 292回目のA問題
AtCoder Beginner Contest 292回目、A問題、Caps Lock、問題文、A小文字のみからなる文字列Sが与えられます。
Sの各文字をA大文字に変換して得られる文字列Tを出力してください。
ということで、大文字にしてくださいですね。
ドットアッパーでいけるかな?プリントからもいけるかな?インプットドットアッパーでいけるかちょっと試してみましょう。
アッパーだと一文字目だけとかになるのかな?
いけましたね。ドットアッパーで全部を大文字にします。
じゃあB問題。B問題、イエロー&レッドカード、問題文。
1からNまでの番号がついたN人の選手がサッカーの試合をします。
選手が反則を犯したとき、その選手にはイエローカードとレッドカードのどちらかが提示されます。
以下の条件のうち1本を満たした選手は退場処分と呼ばれるペナルティーを受けます。
イエローカードを累計2回提示される。レッドカードを提示される。
なお、退場処分を受けた選手にそれ以降カードが提示されることはありません。
あなたはこの試合を観戦します。始め、すべての選手はカードを1回も提示されていません。
9個のイベントが発生するので、イベントで聞かれる質問に正しく答えてください。
イベントは3種類あり、C、X、Cは1、2、3のいずれかという形式で入力から与えられます。
イベントの説明は次の通りです。
1、X。選手Xにイエローカードが提示される。
2、X。選手Xにレッドカードが提示される。
3、X。あなたは選手Xが退場処分を受けたかを質問される。
選手Xが退場処分を受けていればイエス、そうでなければノーと答えてください。
ということで、NQのイベントが与えられます。
NQ。NQイコールマップイント。
イントのインプットドットスプリット。
で、フォーアインレンジ9回クエスチョンが与えられます。
その前に、Lイコールカッコートゥルー。
フォルスにしとくか。フォルス×N。
で、イベントを受け取ります。
イベントABを受け取って、インプットドットスプリット。
めんどくさいので、AイコールイントのA。
Aイコールイコール1だったら、
あ、そうか。
イエローカードとレッドカードの違いがあるのか。
OK。
じゃあ、Lイコールプルーにしておきましょう。
ん?待てよ。Bもこれイント型でしたっけ?
イントっていうか整列だったな。
整列?数字だったな。
ABイコールマップのイントインプットドットスプリットでいいや。
インプットドットスプリットおいで。
Aイコール1だったらB番目の選手にっていうのがあるけど、
これは0インデックスなので、Bマイナスイコール1をしておいて、
LのB番目の選手イコール、
どうしようかな。
If LBの人が、
If LBがトゥルーだったらだから、
If LBだったら、
LのB番目イコールフォルスにします。
もしもうすでにイエローカードをもらっているフォルス状態だったら、
空の文字列にしちゃいましょう。
いや、待てよ。アウトにしとこうか。
outの文字列を入れます。
L if Aイコールイコール2だったら、
2がレッドカードですよね、確か。
2がレッドカードなので、
LBイコールもう一発アウト。
一応Lifにしておきましょう。
Aイコールイコール3だったら、
print
yes
if LのB番目がイコールイコールアウトだったら、
else
noでできた。
入力例1。
no no yes no yes noが出たらOK。
入力例2はないので、
提出してみましょう。
この問題ちょっと楽しかったな。
パズル感が強くて。
ACしたのでC問題いきます。
C問題4バリアブルズ。
問題文。
生成数Nが与えられます。
生成数の組ABCDであって、
ABプラスCDイコールNを満たすものの個数を求めてください。
なお、本文の制約のもと、
答えが9×10の18乗以下であることが証明できます。
Nは2以上。
2×10の5乗以下。
パッと思いつくのは、
ABCDで4つ4分作るとか、
ABCまでができたなら、
Dがわかるので3つ4分作るとかなんでしょうけど、
多分オーバーするよねこれ。
どうしようかな。
入力例1・4は出力例8。
ABCDとして以下の8個が考えられます。
1113、1131、
1212、1221、
1311、2112、
これだけ見ると、
同じ通りのやつがあるな、何個か。
同じ通りのやつがあるから、
だからなんだ?
えーっと、
A×BプラスC×DがNのもの。
だから、
ABCDを入れ替えて、入れ替えて
っていうやり方で出すのが
正解かもしれません。
っていうやり方で出すの。
それだとでも、12×34みたいなのが
できないですもんね。
よし、解説。
諦めが肝心。
ABCDとしてあり得るもの全てについて、
ABCDとしてあり得るもの全てについて、
ABCDイコールNを満たすかどうかを調べると、
オーダーNの4乗で答えを求められます。
これ4分でってことですね。
これは実行時間制限に対して遅すぎます。
ABCの値を仮定すると、
ABCDイコールNを満たすDは
たかだか1個であり、
N-ABが生活Cの倍数かどうかを
調べることで実現する。
存在するかどうかも判定できるため。
N-ABが生の整数かつ
Cの倍数かどうかを調べることで。
存在するかどうかも判定できるため、
ABCを全探索することで
オーダーNの3乗になりますが、
これもやはり遅すぎます。
Xと仮定するとCDの値Yは
N-Xと定まります。
また先ほどと同様の論理で、
Aの値を仮定するとBの値が、
Cの値を仮定するとDの値が定まります。
Xの値、Aの値、Cの値を
全探索すると先ほどと同様、
オーダーNの3乗となりますが、
XイコールABを満たすABの個数、
YイコールCDを満たすCDの個数は
独立に求められるため、
オーダーNの事情で求められます。
またA小なりイコールBと仮定すると、
XイコールABを満たすAは、
A小なりイコール√Xを満たすため、
CDも同様に調べることで、
オーダーNの
これ何で読むの?
わかんないや。オーダーN×√Nかな。
で、答えを求められます。
実装例がC++しかないな。
またちょっと見ておきますね、
他のユーザーさんの方。
一応ユーザー解説があるな。
パイソンじゃないね、こっちも。
またちょっと見ておきます。
では、また次回。お疲れ様です。
11:12

コメント

スクロール