ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC100

はい、記念すべき100回目です。 …だったのですが、本当にボロボロでした、過去の成績の中でもパフォーマンスがワースト2位です。 今日ABCに初参加だった大学のお友達にも負けてしまったので本当に悔しいです。猛省します。

A - Happy Birthday!

提出コード
この問題をパッと見たときから怪しい雰囲気が漂っていました。すぐに解法が思いつきませんでした... 考え方としては、問題の図を見てわかるように、16当分した円を、となりが同じ色にならないように2色で塗り分けていきます。どちらか一方の塗る箇所が半分の8を超えると、どっかで隣り合ってしまうので顔文字:(を出力します。自分の好きなゲームの海外プレイヤーさんのツイートに、このような顔文字をよく見かけていたので、なるほどとはなりましたが最初は何が何だかわかりませんでした!

B - Ringo's Favorite Numbers

提出コード(時間外)
提出時刻からわかるように、B問題を今回は説くことができませんでした... 考え方としては、Nが100以外の時は素直に10DをNにかけて出力します。
Nが100の時のみ、100で割り切れなくて、1から数えて100番目に小さい数、すなわち101になおして10Dをかけます。
ここで、今回僕が詰まって解けなかったポイントなのですが、10Dはpowでやってはいけません。powの戻り値はdouble型なので、N=100,D=2の入力のとき、"1.01 1e+006"のように出力されてしまいます。int型でキャストをしても、値が壊れてしまい正しい答えになりませんでした。なので、おとなしくD回100をかけてあげましょう。

C - *3 or /2

提出コード
実行時間間に合うかわかりませんでしたが、とりあえず書いて提出したら、知らない間にACをもらってました(この時、サイトが重くてジャッジに時間がかかっていたため放置してました)。 一番多く操作を行うためには、A_iが2の倍数であるようなiを一つ選び、i番目だけ2で割る、それ以外はすべて3をかける、という操作をひたすら繰り返すことです。なので、すべてのA_iについて、2で何回割り切れるか、を調べていって、その回数の合計を求めてあげれば答えとなります。

D - Patisserie ABC

提出コード(時間外)
問題を読んだ時点でDPだと思いました。 その結果絶対値の処理ができなくて時間いっぱいになりました。
この問題では、絶対値を外した時、3種類の評価ポイントがそれぞれ正の場合と負の場合の2通りあるので、たかだか8通りしかありません。なので、その8通りのパターンそれぞれについて、3種類の評価ポイントの和を大きい順にM個とり(貪欲法ですね)、8パターンの中で最も合計値が大きかったものが答えになります。
DPでも一応いけるらしいので、いろいろ落ち着いたら練習がてらやってみようと思います。


水色になりたいなーと思っても、結果がいつも安定していないので、行ったり来たりを繰り返してます。もっと経験を積んで安定してB~Dを解けるようになりたいですね(毎回同じこと言ってる気がしてます)。