AOJ2243 Step Step Evolution
Step Step Evolution | Aizu Online Judge
問題概要
3*3のマスを左右どちらかの足で順番に踏むゲームをする。与えられる指示に従って左右の足で交互にマスを踏んでいきたいが、右足よりも右側のマスを左足で踏んだり、左足よりも左側のマスを右足で踏んだりすることはしたくないので、そのような場合は同じ足で続けてマスを踏むことになる。
踏むマスの順が文字列で与えられるので、左右の足で交互にマスを踏めない回数を答えよ。
制約
文字列の長さは 以下
解法
一番最初にマスを踏む足(右足か左足)を決めると、求める回数は一意に定まるので、小さい方を答えれば良いです。
AIZU ONLINE JUDGE: Code Review
AOJ1316 The Sorcerer's Donut
The Sorcerer's Donut | Aizu Online Judge
問題概要
ドーナツ状の物体の表面に文字列が書かれている。ある文字から8方向に移動し続けてできる文字列のうち、2度以上出現する文字列で長さが最長のものを答えよ。複数存在する場合は辞書順最小のものを答えよ。
制約
解法
すべての文字について、その文字からはじまる文字列を全部調べ、mapなどに入れて、2度以上出現する文字で最長なものを探せばいいです。
AIZU ONLINE JUDGE: Code Review
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