AtCoder ABC169 参加記

ABC169 に参加しました。
結果は 4 完 6 ペナレート微増でした。
f:id:granddaifuku:20200601002200p:plain

A 問題

問題概要
  • 整数 a と b をかけた結果を出力する
解法

言われた通りにやりましょう。

提出したソースコード

B 問題

問題概要
  • 整数列 A が与えられる
  • 全ての結果を掛け算し、 1e18 を超えなければそれを出力、超えたら -1 を出力
解法

解いた中では一番難しかったです。
ここで 4 WA 出しました。
C++ での解法が浮かばず、python で提出しました。
昇順にソートして、掛け算していき、 1e18 を超えたら -1 を出力して終了しました。
そのまま全て掛け算をすると TLE になります。
これはかなり桁数が大きくなり、内部での処理に時間がかかるためだと思われます。

提出したソースコード

C 問題

問題概要
  • 整数 A と 小数点 2 位までの B が与えられる
  •  A \times B を少数切り捨てで出力する
解法

 A \times B \times 1000 / 1000 を出力します。
100 倍して 100 で割ったものは落ちました。
理由はこれだそうです。
f:id:granddaifuku:20200601001400p:plain chokudaiさん、えびちゃんさんのツイートより

提出したソースコード

D 問題

問題概要
  • 整数 N が与えられる
  • N をある素数 p と正整数 m を用いて  p^{m} で割る この時、上の数は以前の操作で選んだものと被ってはならない
  • N を上記の数で割ったものと置き換える時の最大の操作回数を求める
解法

N を素因数分解します。
素数の累乗を小さい順に使っていくのが最適です。
提出したソースコード