ABC123に参加しました
はじめに
結果から言うとABCの3完でした
久しぶりのABCでした(ABCがある日に友達と遊んでいた)がCまでAC出来たので素直にうれしかったです
今回は問題文をよく読まなかったせいでA問題に少し手間取ってしまいました
以下僕の解法です
A問題
太字になっている直接の意味が分からず、例題の解説もA問題だからとロクに読まなかったため、初めは「入力の前後のアンテナの距離がk以下」であればいいのかなと思い組んでみたら例2で引っ掛かり、よくよく解説を読んでみると「全てのアンテナ間の距離がk以下」ということでした
問題文はちゃんと読みましょう
ということで僕はvectorを使ってアンテナの位置を配列に落とし込んで2重ループ使って、1つ目のアンテナと2つ目のアンテナの距離、1つ目のアンテナと3つ目のアンテナの距離……途中で間の距離がkを越えたら":("を出力という風にしました
B問題
入力を全部足したら見えてくると思いますが、答えは「入力された値+α」なわけです(当たり前ですが)
じゃあその+αってなんやねんって考えると、10に対する各入力の1の位の補数を足したやつがそれっぽくなってくるわけです
これは10の倍数の時刻でしか注文できないので、下一桁がなんであれ〇0分まで待たなくちゃいけないからですね
でもそのまま足すだけだとちょっとはみ出します
じゃあ何が余分なのかというと、最後に注文するものの「後の」待ち時間が必要ありません
入力例1の場合はAPCラーメンの後の待ち時間の5分が必要ないわけです
この最後に注文するものを何にするかで時間が変わってきます
最短にしたい場合は上で述べた補数が1番大きいものを選べばよいですね
ここまでを踏まえて入力例1を考えてみると、とりあえず入力を全部足す(211)→補数を足す(220)→APCラーメンの分はいらないので引く(215)
という風になります
注意すべきは10に対する0の補数は10ですが、0の時待ち時間なしで注文できるので下一桁が0のときは0を足します
結局のところ、入力が10で割り切れたら0を、それ以外なら10-入力÷10をそれぞれ待ち時間の配列に入れてその中でソートして一番大きい奴だけ抜いて答えに足してやればいいです
C問題
32bit整数型に収まらない時があるとか言われているので素直にlong long int にします
問題の考え方としては一番乗れる人数が少ない交通機関を主にして考えます
砂時計みたいに上に一杯砂が溜まっていても下に落ちる口が小さければ、全部が落ちるまでに時間がかかります
同じように考えると、例え100人乗っても大丈夫なバスがあっても1人しか乗れない船があれば都市6までその船で全員を運ぶ分時間がかかるわけです
そうやって考えてゆくと入力例1の場合は初め3人で行っても2人(入力の中で一番小さい数)で行ってもかかる時間は変わりません
ですから最終的には n / min(a, b, c, d, e) を切り上げてやった数に+4してやった時間が答えです
D問題
時間中に解けなかったのですがまた余裕があれば書きたいです
終わりに
僕は愚直にしかできませんが、もっとおしゃれな解法があると思うので探してください
いい感じに伸びてくれました
今回はC問題がかなり簡単だったんじゃあないかなと思いました(Dももう少し時間があれば解けたかもしれない……)
3月さぼったせいで春休み中に茶色行けてません!
何もしないこととの格闘が重要になってきます
また過去問を解いたり螺旋本をしたりして精進していきます
稚拙な文章でしたがここまで読んでくださりありがとうございました
AtCoder Beginner Contest 117に参加しました
今回の結果
A,Bは合計15分弱でAC
Cを悩んでるうちに終わりました
Dはちょっとbitをやったことあったけど、全く分かりませんでした
今回、コンテスト終了後に冷静に考えたらC解けたのでそれがとても悔しいです
A問題、B問題について
AはfloatでT、N入力してTをNで割って終わりです
Bは降順でソートして「先頭」と「先頭以外を足したもの」を比べて「先頭」のほうが小さければ"Yes"を、大きければ"No"を出力しました
C問題について
昇順にXをソートしてX[ i + 1 ] - X[ i ]を他の配列(Yとする)に保管し、Yを昇順にソートします
その後、後ろからN個分popしてやって残ったやつを全部足してやれば最小値が出ます
文字にしてみれば簡単なんですけど、コンテスト中はこの解法が出てきませんでした
M個ある時にコマの位置の保存はどうしたらいいんだろうとかなんとか考えてました
あと、N、Mと二つ個数を表す変数があり、結構そこで書き間違えたので注意します
悲しみの終了1時間後提出
終了後にぼーっとしながら螺旋本見てたら、ふっと解法を思いついて試しに実装してみたら一発でACしてしまいました……
Cが通っていたらもう少しレートが上がっていたと思うと余計悔しいです
もう少し精進します
ありがとうございました
ペンタブとクリスタを買った話
題名の通りですが、ペンタブを買いました
実は昔中学生ぐらいの時もペンタブを持っていたのですが、久しぶりに使おうと思って引っ張り出そうと思ったらもうどこにもありませんでした
多分処理されちゃったのでしょうね
仕方ないので新しくペンタブを買うことに
今回購入したone by wacomは板本体にファンクションキーがついていないため、手で変に押してしまう心配がなくなってとてもいいです
あと、パソコンも中学生の頃とは比べ物にならないほど性能が良くなったので結構ぬるぬる動いてくれます
さらにお絵かきソフトも買いました
当時はpixiaを使っていましたが、お金に余裕もできたのでクリスタを購入しました
それにしてもお絵かきソフトってすごいですね
自分の画力なんてカスみたいなものだとよくわかっていますが、それでもお絵かきソフトで描いてそれっぽく編集すれば、なかなかいい感じになりました
まあでも元が元なので、初心者が描いた絵!って感じから抜け出せていませんが……
蒼星石好きなんですよね
まあその話は長くなってしまうので、またの機会があれば書こうと思います
時間がある時にこつこつ描いていこうと思います
それでは今日はこの辺で
読んでくださりありがとうございました