AOJ1345 Bit String Reordering
Bit String Reordering | Aizu Online Judge
問題概要
長さ のビット列 を、となりあう2つのビットをswapすることを繰り返してランレングス符号が であるようなビット列に変換するときの最小のswap回数を求めよ。
ランレングス符号は0または1が連続する最大の長さを表した数列のことである。たとえば、ランレングス符号が"1 3 2"となるビット列は"011100"と"100011"の2通り存在する。
制約
ビット列 からswap操作のみを繰り返してランレングス符号が となるようなビット列に変換できることが保証される。
解法
ありうる2通りのビット列に対して、最小のswap回数を求め、小さい方を出力すれば良い。
最小のswap回数は、左から順に見ていって、ことなるビットの場合は、それより右で一番近いものとswapするを繰り返せば良い。
AIZU ONLINE JUDGE: Code Review
AOJ1286 Expected Allowance
Expected Allowance | Aizu Online Judge
問題概要
個の 面サイコロを振って出た目の総和から を引いたものの期待値を求めてください。ただし、出た目の総和から を引いたものが0以下になるときは1として計算します。
制約
解法
制約を睨むと目の出方を全探索することができるので、やります。
AIZU ONLINE JUDGE: Code Review
AOJ1277 Minimal Backgammon
Minimal Backgammon | Aizu Online Judge
問題概要
0から までのマスがあるすごろくをします。マスには何も書いていないマス、止まると1ターン休みになるマス、止まるとスタートのマスまで戻るマスがあります。マス0がスタートのマス、マス がゴールのマスで、どちらのマスにも何も書いてありません。
6面のサイコロを使って駒を動かします。駒はゴールのマスより先に進めないので、例えば のマスにいるときにサイコロの目が5のとき、駒は に進みます。
ターン以内に駒がゴールに到達する確率を求めてください。
制約
AOJ1368 Quality of Check Digits
Quality of Check Digits | Aizu Online Judge
問題概要
0000~9999の4桁の数の後ろにチェックディジットを1つつけて5桁の数を作る。チェックディジット は、4桁の数の数字を上から としたとき、
と定義される。ここで は与えられた表の 行 列目の数字を指す。
与えられる表の 行 列目は必ず0になっているので、 は必ず0になる。これが0にならない場合、誤りを発見したことになる。
0000~9999の4桁の数 にチェックディジットをつけた5桁の数 について、以下の2つのどちらかの操作を行った後、 が0になるような はいくつあるか答えよ。
- のある1つの桁の数字を異なる数字にする
- のとなりあう2つの桁の数を入れ替えて、 とは違う数にする
AOJ2340 Carpenters' Language
Carpenters' Language | Aizu Online Judge
問題概要
括弧列がvalidであるとは、文脈自由文法で以下のように定義される。
S -> SS | (S) | )S( | ε
あなたは最初、空の括弧列Sを持っている。
回のクエリが与えられる。 番目のクエリで が与えられるので、Sの 文字目に を 回挿入し、できた括弧列がvalidであるかを判定してください。
制約
番目のクエリの前の の長さ
は '(' または ')'
解法
よく考えると、'('の個数と')'の個数が同じだとvalidな括弧列になることがわかるので、オーバーフローを気にしながら'('の数と')'の数が等しいかをチェックすれば良いです。
ちなみにぼくはよく考えてもわかりませんでした。
AIZU ONLINE JUDGE: Code Review
AOJ2165 Strange String Manipulation
Strange String Manipulation | Aizu Online Judge
問題概要
線形合同法を使って擬似乱数を生成します。線形合同法は
mod
で計算します。ここで は定数で、この問題では 、です。
いま、文字列 を、乱数列 を使って別の文字列 に変換したいです。文字列 は
mod
で定義されます。
文字列 のエントロピーが最小になるような を答えてください。エントロピーが最小になるような組が複数ある場合は が最小になるものを答えてください。
文字列のエントロピー は
で定義されます。ここで は文字列の長さ、 はアルファベット の出現回数です。
解法
S,A,Cを全探索します。16*16*16*256なので間に合います。
AIZU ONLINE JUDGE: Code Review
AOJ1249 Make a Sequence
Make a Sequence | Aizu Online Judge
問題概要
2人のプレイヤーが白と黒の石を使って交互にゲームをプレイする。黒が先手。
* 本のペグ(杭)があり、それぞれ 個までボールを重ねることができる。
ゲーム開始時にはどのペグにもボールはない。
ターンになると、プレイヤーは1つのペグを選び自分の色のボールを1つ置くことができる。そのペグにボールがない場合は自分のボールがペグの一番下になり、そうでない場合はそのペグの一番上にあるボールの上に重なる。
縦または横または斜めに自分の色のボールが 個以上連続した列ができるとそのプレイヤーの勝ちになる。勝者が決まる前にボールを置く場所がなくなったりゲームをやめてしまったら引き分けになる。(勝者が決まっているのにプレイを続行している入力があることに注意する。)
ターン数 とボールを置いたペグの座標 ()が与えられるので、どちらのプレイヤーが勝ったかを判定する。黒が勝った場合は"Black"、白が勝った場合は"White"、引き分けだった場合は"Draw"を出力する。また引き分けでないときは勝敗が決まったターン数も出力する。
制約
解法
それぞれのターンごとに、勝者が決まるかどうかを判定します。
ある位置にボールを置いたとき、ボールが 個連続しているかどうかを見る必要があるのは13方向(くわしくは問題文参照)で、各方向につき 個見ればいいので、全体で * 12 * 回になって間に合います。
愚直に書くと行数がアになるのでもう少し綺麗に書きたいですね。
AIZU ONLINE JUDGE: Code Review