AtCoderBeginnerContest423 B問題200点 「Locked Rooms」
https://atcoder.jp/contests/abc423/tasks/abc423_b
https://gyazo.com/83df7a2ec990e4b4f64f261c77fc730d
問題概要
制約
気持ち
解法
部屋の数は最大 100 個です。
よって、「ドアが空いていれば隣に移動できる」をシミュレートして、その結果の値を求めればよいです。
実装としてはシンプルになるため、この方法を取りました。
シミュレートの回数ですが、たかだが部屋・ドアの数だけの移動回数しかありえないため、その数だけ回しておけばいいです。
計算量
$ O(N^2)
新たな学び
反省点
コード
code: cpp
const T = 100 * 2
func solve() {
N := mio.NextInt()
L := make([]int, N)
for i := 0; i < N; i++ {
Li = mio.NextInt()
}
dp := make([]int, N+1)
dp0 = 1
dpN = 1
for q := 0; q < T; q++ {
for i := 0; i < N; i++ {
if Li == 1 {
continue
}
dpi+1 |= dpi
dpi |= dpi+1
}
}
ans := 0
for i := 0; i <= N; i++ {
if dpi == 0 {
ans++
}
}
mio.PrintLn(ans)
}
// ------------------------------------------------------------
// ------------------------------------------------------------
func main() {
solve()
defer mio.Flush()
}
#AtCoder #solved #ABC #ABC423 #200