足跡-sokuseki-

りかの日進月歩の記録

AOJ1345 Bit String Reordering

Bit String Reordering | Aizu Online Judge

問題概要

長さ  N のビット列  b を、となりあう2つのビットをswapすることを繰り返してランレングス符号が  p であるようなビット列に変換するときの最小のswap回数を求めよ。
ランレングス符号は0または1が連続する最大の長さを表した数列のことである。たとえば、ランレングス符号が"1 3 2"となるビット列は"011100"と"100011"の2通り存在する。

制約

 1 \le N \le 15
ビット列  b からswap操作のみを繰り返してランレングス符号が  p となるようなビット列に変換できることが保証される。

解法

ありうる2通りのビット列に対して、最小のswap回数を求め、小さい方を出力すれば良い。
最小のswap回数は、左から順に見ていって、ことなるビットの場合は、それより右で一番近いものとswapするを繰り返せば良い。
AIZU ONLINE JUDGE: Code Review