A問題、Addition and Subtraction Easy
AtCoder Beginner Contest 050回目
A問題、Addition and Subtraction Easy
問題文、女医師のお姉ちゃんはAOPBという式の値を計算したいと思っています。
ここで、ABは整数で、OPはプラスまたはマイナスの記号です。
あなたは、女医師のお姉ちゃんの代わりにこれを求めるプログラムを作ることです。
あなたの仕事は、入力例1は1プラス2が与えられ、出力が3。
入力例2は5マイナス7が入力され、出力はマイナス2ですね。
AとBとC、どうしようかな。
AとOPとBを受け取ります。
今回は、
整数だけじゃないので、インプットスプリット。
一旦、文字列で全員受け取ります。文字として。
プリント
イントA
プラスイントB
IF
OPイコールイコール
プラス
AとBとBを受け取ります。
そうじゃなかったら、ELSE
INTOA-INTOB
どうでしょうか。
提出してみましょう。
あ、REが出ましたね。
入力が間違ってたのかな。
あ、インプット.スプリットになってないや。
インプット、何これ、カンマ?みたいなことになっちゃってるので、
多分、そこを修正すればいけるんじゃないですか。
多分、そこを修正すればいけるんじゃないですか。
多分、そこを修正すればいけるんじゃないですか。
多分、そこを修正すればいけるんじゃないですか。
よいしょ。
インプット.スプリット。提出しなおし。
インプット.スプリット。提出しなおし。
これでダメだったら、ちょっとコードテストでちゃんとチェックします。
はい、でおりました。
B問題、コンテストwithdrinkseasy
B問題行きます。
B問題、コンテストwithdrinkseasy。
問題文。
女医師のお姉ちゃんは、あるプログラミングコンテストの決勝を控えています。
このコンテストではN問の問題が用意されており、それらには1からNの番号がついています。
このコンテストでは、N問の問題が用意されており、それらには1からNの番号がついています。
女医師のお姉ちゃんは問題Iを解くのにかかる時間がTI病であることを知っています
またこのコンテストではM種類のドリンクが提供されており1からMの番号がついています
そしてドリンクIを飲むと脳が刺激され問題PIを解くのにかかる時間がXI病になります
他の問題を解くのにかかる時間に変化はありません
コンテスタントはコンテスト開始前にいずれかのドリンクを1本だけ飲むことができます
コンテスタントって何?
女医師のお姉ちゃんはそれぞれのドリンクについてそれを飲んだ際に全ての問題を解くのに何秒必要なのかを知りたくなりました
全ての問題を解くのに必要な時間とはそれぞれの問題を解くのにかかる時間の合計です
あなたの仕事は女医師のお姉ちゃんの代わりにこれを求めるプログラムを作成します
それぞれのドリンクについてそれを飲んだ際に全ての問題を解くのに必要な時間を求め順番に1行ずつ出力せよ
カラスめっちゃ鳴いとるな
Nが100以下
Tiが10の5乗以下
Mが100以下
PiはNだから100以下
Xiは10の5乗以下なので
4分で回して大丈夫そうだな
B問題ですし
よいしょ
Nイコールイント
インプット
でTが与えられます
Tイコール
リストのマップのイント
インプットドットスプリット
でM
イントのインプット
でOI
OIイン
レンジ
MかE
PとXだっけ
が与えられます
マップのイントのインプットスプリット
でM
スプリット
ドットドットスプリット
んーと
M種類のドリンク
I番目のドリンクを飲むと
問題Pi番目を解くのにかかる時間が
XI秒になります
で出力は
1つ目のドリンクを飲んだ場合
それぞれの問題を解くのに要する時間は
1秒1秒4秒になります
はいはいはい
もう各ドリンクを飲んだ秒数を出すだけですね
なのでえっとPとXをとりあえず-Y
-Yじゃない-1しておきます
あのインデックスの問題上ね
OIインレンジM
PXイコールマップのイントのインプットドットスプリット
でPとXをそれぞれ-1しました
プリントいや待てよ
for文の中にtmpでイコールtのリストを入れておきましょう
でtmpのP番目がイコールXになります
プリントサムtmpでいいんじゃないでしょうか
えー入力例1は6と9が出たらOK
5と6全然ちゃうな
全然ちゃうな
ん?
んーと
プリントtmpの数列を出してもらいましょう
014
014?
あ、そうか
Xは-1しなくていいんだ
インデックスじゃないから
Pだけ-1して
Xは秒数だからそのままで
いいんですね
6869?なんで?
2つ目のドリンクを飲んだ場合
それぞれの問題を解くのに要する時間は
2、3、4秒です
2、3、4秒になります
2、3、4、2?
うん
あれ?
tmpイコールt
あ
tのコピーを押せないといけないんだ
えーっとtの括弧コロンでOKですか?
OKですね
tmpイコールtってやっちゃうと
tmpの中の配列を変えた時に
元のtも中変わっちゃうので
変わるんですよね確かね
だから
1個目の
秒数変更がそのまま保存されて
ちょっとおかしくなってたよって感じですかね
2個目の出力で19、20、5、30
19、20、5、30OKですね
提出していきましょう
よいしょ
まだちょっと
なんだろう
仕様が把握できてないところがありますね
Pythonというかプログラミング言語全般的に
はいB問題いきました
C問題、ライニングアップ
C問題いきます
C問題ライニングアップ
問題文
1からNまで番号のついたN人の人がいます
彼らは昨日ある順番で左右一列に並んでいましたが
今日になってその並び方が分からなくなってしまいました
しかし彼らは全員
自分の左に並んでいた人数と
自分の右に並んでいた人数の差の絶対値を覚えています
彼らの報告と
彼らの報告によると
人Iの自分の左に並んでいた人数と
自分の右に並んでいた人数の差の絶対値はAIです
彼らの報告をもとに
元の並び方が何通りあり得るかを求めてください
ただし答えは非常に大きくなることがあるので
10の9乗プラス7で割った余りを出力してください
また彼らの報告は間違っており
あり得る並び方がないこともあり得ます
その際は
0を出力してください
え?
それはちょっと無理では?
入力例1
5人
24402
あり得る並び方は人の番号で書くと
21453
25413
31452
35412の4通りです
うーん
あ、入力2
どのような並び方でも報告と矛盾するので
0が答えとなります
いやー
これはちょっと
差の絶対値
あり得る並び方がないこともって言われると
ちょっとそっちの処理が全然思い浮かばないですね
解説を見ます
あーこれ多分Pythonの解説ないな
nが偶数である場合を考えます
n人が並んだ場合
自分の左に並んでいた人数と
自分の右に並んでいた人数の差の絶対値は
n-1
n-3
n-5
3
1
1
3
n-5
n-3
n-1
となるはずです
この配列をbiとします
もうこの時点でちょっと分かんないな
するとこの問題は
aiを並び替えてbiにする方法は何通りか
という問題になります
まずaiとbiである値の登場する回数が等しくなかった場合
明らかに答えは
0です
では等しい場合はどうなるでしょうか
この配列には
2分のn種類の値が
それぞれ2回ずつ登場しているはずです
それぞれの値について並び替える方法は
aiで前にあったものがbiで前にあると
aiで前にあったものがbiで後ろにある
の2通り考えられます
2分のn種類の値で独立に並び替えがあるので
求める答えは2の2分のn乗になります
nが奇数である場合は2分のn乗になります
奇数である場合も同様に解けますが
その場合aiやbiの中に0という値が
一度だけ登場することに注意してください
pythonの解説例とかは特にないので
他の方の提出を見て
ちょっと勉強しておきます
では今回はここまで
また次回お疲れ様です