1. 競プロする人
  2. AtCoder Beginner Contest 169
2024-07-23 12:25

AtCoder Beginner Contest 169

AtCoder Beginner Contest 169

https://atcoder.jp/contests/abc169


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

B:https://atcoder.jp/contests/abc169/submissions/50218898


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

2・5・11・17・23・31日更新予定

#競技プログラミング #Python #podcast
00:04
AtCoder Beginner Contest 169、A問題、Multiplication 1、問題文A×Bを求めてください。
入力はAとBが与えられます。そのままですね。
A、Bイコール、マップ、イント、インプット、イヌットになっている、インプット、ドット、スプリット、プリント、A、アスタリスク、Bでいかがでしょうか。
はい、A、CしたのでB問題いきます。
B問題、Multiplication 2、N個の整数、A1からAnまでが与えられます。
全部の総積っていうのかな、全部をかけた数、A1からAnまでをかけた数を求めてください。
ただし、結果が10の18乗を超える場合は、代わりにマイナス1を出力してください。
はい、与えA1、数列が普通に2行目で与えられるから、それを掛け算していけ、ということですが。
ちょっとマイナス1の0が出ているので、こいつをちょっと使いつつですかね。
Nイコール、イントのインプット、Aイコール、リストのマップのイントのインプット、ドット、スプリット、インプット、ドット、スプリット。
で、ゼロがAの中にあったら、もう問答無用でプリントゼロでいいです。
Exitで、10の18乗、Sイコール10アスタリスクアスタリスク18、
4アインレンジ、いや、4をスモールAインラジエ、で、ANSイコール0を入れといて、
03:07
ANSプラスイコール、プラスイコール?かけるにしとくか。
ANSイコール1の、ANSかけるイコールAですね、小文字A。
で、if連、いや、ifANS大なりSだったら、
あ、でもマイナスがあるかもしれないのか。
結果が10の18乗を超える、あ、マイナスはないね。
マイナスないならいいか。
ifANSが10の18乗を超えた場合、Exit、プリント、マイナス1。
で、一番最後にプリント、ANSでどうでしょうか。
はい、一旦マイナス1がちゃんと出ました。
2個目、入力例3は0が入っているから、0でOKかな。
プリントからの文字列になっている、プリント0ですね。
コードテストというか、入力例はクリアしたので出力していきます。
出力じゃないや、テストしていきます。
大丈夫そうですね。ACしたのでC問題いきます。
マルチプリケーション3、A×Bの小数点以下を切り捨て、結果を整数として出力してください。
小数点以下を切り捨て。
あ、小数点で掛け算がくるのか。
小数点ってどうだったっけ。
フロートか。だからA×Bイコールマップのフロートイントインプットドットスプリット。
で、プリントイントのA×Bっていうのがとりあえず直感的に思い浮かぶものなんですが、エラーになっちゃうね。
06:07
あ、違うわ。マップのフロートだからイントはもういらないんだ、その時点で。
かっこが1個多い。
217。
入力例2は0が出たらOK。
入力例3は99000が出たらOK。
こんなシー問題簡単なわけないと思うんですが、とりあえず出してみようかな。
やっぱりWA間違いですよって言われてますね。
5個だけ間違いだな。15個ケースがあって、それはクリアしてる。
5個だけダメですよってなってる。
問題があるとすれば、10の15乗。
Aは10の15乗、Bは10まで。
Bは小数点2まで与えられる。
Aは整数。
小数点以下を切り捨て、結果を整数として出力してください。
そもそも10の15乗×10っていうのは成立するというか、出せるんですか?
プリント10の15乗×10マックスだった場合。
うん、出せるね。
出せるなら問題ないと思うんだけどな。
切り捨ての仕方が悪いのかな。
フロートで計算して、
フロートで計算してドットから前を出力ってしても、
それはでもintの丸め込みと同じじゃないのかな。
一旦A×Bを大文字Aに入れて、
09:03
STRにして文字型にして、
STR A×BでドットスプリットでドットプリントAの0番目。
でしたらどうですか?
ちょっと入力例をもう1回確認して、
これでダメそうだったら解説を見ていこうと思います。
入力例はクリアできてるっぽいですね。
だからint型にすると何かしら微細な誤差が生じるかもっていうことで、
文字型にしてドットから前を機械的に取り出すというコードにしたんですが、
でも変わらないと思うけどな。
さっきと全く同じ結果になりましたね。
解説を見ます。
C問題。公式解説から見ようかな。
不動小数点数として掛け算を行うと精度が足りません。
Bを100倍してA×B×A×B×100÷100とすることで整数の範囲で誤差なく計算することができます。
Bを100倍して整数に変換する際にも誤差に注意してください。
Bを100倍して掛け算した後に÷100をしたらいい。
なんかこれ随分前にやった気がしますね、似たような問題を。
ちょっとじゃあやってみましょうか。
というかコードテストに残っているやつを流用しよう。
プリントA×B×100÷100。
でもこれでイント型にしないといけないのか。
これでどうだ。
12:02
小数点の扱いがまだちょっと慣れてないな。
ダメだ。
なんかちょっと間違えてるな、理解が。
他の方の提出例を見ておこうと思います。
ではまた次回。お疲れ様です。
12:25

コメント

スクロール