AtCoder Beginner Contest 173

ABC173に参加しました。

Dまでをそれなりの速さでペナルティを出さずに終えられたのでよかったです。

Eがかなりつらいですね…。

 

Tasks - AtCoder Beginner Contest 173

All Submissions - AtCoder Beginner Contest 173

 

A-Payment

Nを1000で割った商に1を足して、それを1000倍してNで引きました。

Nを1000で割った商が0以外なら1000から引く、という方が簡単でいいですね。

 

B-Judge Status Summary

入力を受け取る際にif文を4回書いて計数しました。

 

C-H and V

なんか最近bit全探索多くないですか?

すぐ思いついて書くことができてよかったです。前よりかは早く書けるようになりましたが、まだまだ遅いので練習したいですね。

 

D-Chat in a Circle

フレンドリーさの大きい人から訪ねていくようにすると最大化できることが分かります。大きい人から訪ねることで、原則その人がきた直後に左右両隣に来た人はその人の心地よさを感じることができます。この原則が当てはまらない人は一番最初に訪れる人の見になります。

 

E-Multiplication 4

めちゃくちゃつらい。

N個がすべてマイナスかつKが奇数の時にしかマイナスになることはないということは分かりました。1つでも0以上の数があれば、偶数個のマイナスを選び、Kが奇数でも非負整数でKに合うようにできるからです。

コンテスト中はマイナス同士をかけたものとプラス同士をかけたものを比べて大きいほうを使う、という方針で実装しようとしました。この時、マイナス同士は2つ使わないとプラスにならないのですが、プラス同士は1つだけでもプラスなので1つずつ使うのが最適です。しかし、これには気が付きませんでした(例えば残り3個選ぶ必要があり、{-6, -3, 1, 4, 5}が選択肢の場合、4*5=20、(-6)*(-3)=18となりますが、5*4*1=20ではなく、(-6)*(-3)*5=90が最大になる、など)。

コンテスト後は絶対値が大きいものから掛け合わせて最後に符号を調整しようとしましたが、いまいち雑なせいでまだACできていません。

 

今回は以上です。

EはAC出来そうで、これまではACしてから書いていたのですが、記憶が薄れる前に書いたほうがいいかなということで先にまとめておくことにしました。

Fも難しくないようなのであわせてACしておきたいです。