Upload
sho-iizuka
View
489
Download
5
Embed Size (px)
Citation preview
MM82 ColorLinker勝手に解説
問題概要(1/6)• N*Nのグリッドが与えられる(20 ≦ N ≦ 60)
• 初期状態では、各々のセルは色が塗られているか、塗られていないかのどちらか(色の種類は2~5)
問題概要(2/6)•あなたが行える操作•任意のセルに、任意の色を塗る•ただし1つのセルに複数の色を塗ることも可能
•初期状態で色が塗られていたセルにも色を塗ることが可能
問題概要(3/6)•タスク•同じ色のすべてのセルが、上下左右で連結になるように色を塗る
•ただし、色を塗るとペナルティが加算される(計算方法は後述)
•なるべくペナルティを少なくせよ
問題概要(4/6)
問題概要(5/6)•ペナルティの計算方法•整数p (N ≦ p ≦ 8*N) が与えられる•各々のセルについて、塗られている色の数をcとしたときそのセルのペナルティ = c+c*(c-1)*p
• すべてのセルのペナルティを合計する
問題概要(6/6)•制約•時間制限 10秒(2005年に発売されたXeon 3.6GHz)
• メモリ制限 1024MB•正式な問題文はこちら
問題からわかること
•そのセルのペナルティ = c+c*(c-1)*p• c: 塗られている色の数•N ≦ p ≦ 8*N
問題からわかること
•1色で塗ったとき• c+c*(c-1)*p = 1
問題からわかること•2色で塗ったとき• c+c*(c-1)*p = 2+2*N ~ 2+16*N•複数の色で塗るとペナルティがヤバい•これを避けるためならかなり遠回りしてよい
私の解法•とにかく繋げてみた
•これはマズイ
私の解法•ダイクストラっぽい方法で重ね塗りを避けるようにしてみた
•同じ色のセルに移動 → コスト0•空白のセルに移動 → コスト1•別の色が塗られているセルに移動→ c+c*(c-1)*p
私の解法
✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
私の解法•改善が期待できるところ•つなぐ順番を変えれば交差の回数を減らせる場合があった
•「つなぐ順番を焼きなまし法で決めれば良いんじゃね?」
•少しだけスコアが改善された
私の解法•「高速化して試行回数を増やせばスコア上がるかな?」
•時間を100倍かけて実行してみたが、ほとんどスコア上がらず
•高速化は諦めて別の改善方法を考えたが、思いつかずタイムアップ
他の人の解法
•上位の人たちは、色の種類が高々5種類しかないことも利用しているっぽい?
• TopCoderのForumでネタばらし会が開催中
•日本の人の投稿は #MM82 で検索