Submission #24034186


Source Code Expand

import sys
import numpy as np


def main():
    h, w = map(int, input().split())
    s = np.array([[c == '.' for c in input()]
                  for _ in range(h)], dtype=np.bool8)
    print(solve(s))


if __name__ == "__main__":
    if sys.argv[-1] == 'ONLINE_JUDGE':
        from numba.pycc import CC

        def solve(s):
            h, w = s.shape
            mod = 10 ** 9 + 7
            mask = (1 << (w + 1)) - 1

            def collision(j, b):
                return (j > 0 and b & 1
                        or j + 1 < w and (b >> (w - 2)) & 1
                        or (b >> (w - 1)) & 1
                        or j > 0 and (b >> w) & 1)

            states = []
            for i in range(w):
                lis = [0]
                for j in range(w + 1):
                    nex = []
                    t = (i + j - 1) % w
                    for k in lis:
                        nex.append(k << 1)
                        if not collision(t, k):
                            nex.append(k << 1 | 1)
                    lis = nex
                states.append(lis)

            indices = []
            for st in states:
                dic = {}
                for i, b in enumerate(st):
                    dic[b] = i
                indices.append(dic)
            # indices = [{b: i for i, b in enumerate(st)} for st in states]
            nexts = [[[indices[i - w + 1][st << 1 & mask],
                       indices[i - w + 1][(st << 1 | 1) & mask]
                       if not collision(i, st) else -1]
                      for st in states[i]] for i in range(w)]

            dp = [0 for _ in states[0]]
            dp[0] = 1

            for i in range(h):
                for j in range(w):
                    nex = [0 for _ in states[j - w + 1]]
                    for k, c in enumerate(dp):
                        for l in range(2):
                            nk = nexts[j][k][l]
                            if l == 0 or s[i][j] and nk != -1:
                                nex[nk] += c
                                if nex[nk] >= mod:
                                    nex[nk] -= mod

                    dp = nex

            res = 0
            for i in dp:
                res += i
            return res % mod

        cc = CC('my_module')
        cc.export('solve', 'int64(boolean[:, :])')(solve)
        cc.compile()

    else:
        from my_module import solve
        main()

Submission Info

Submission Time
Task 023 - Avoid War(★7)
User riantkb
Language Python (3.8.2)
Score 7
Code Size 2427 Byte
Status AC
Exec Time 7611 ms
Memory 597080 KiB

Judge Result

Set Name Sample Subtask 1 Subtask 2 Subtask 3 Subtask 4
Score / Max Score 0 / 0 1 / 1 1 / 1 2 / 2 3 / 3
Status
AC × 5
AC × 10
AC × 20
AC × 30
AC × 45
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt
Subtask 1 sample_01, sample_02, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt
Subtask 2 sample_01, sample_02, sample_03, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 02_01.txt, 02_02.txt, 02_03.txt, 02_04.txt, 02_05.txt, 02_06.txt, 02_07.txt, 02_08.txt, 02_09.txt, 02_10.txt
Subtask 3 sample_01, sample_02, sample_03, sample_04, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 02_01.txt, 02_02.txt, 02_03.txt, 02_04.txt, 02_05.txt, 02_06.txt, 02_07.txt, 02_08.txt, 02_09.txt, 02_10.txt, 03_01.txt, 03_02.txt, 03_03.txt, 03_04.txt, 03_05.txt, 03_06.txt, 03_07.txt, 03_08.txt, 03_09.txt, 03_10.txt
Subtask 4 sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_05.txt, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 02_01.txt, 02_02.txt, 02_03.txt, 02_04.txt, 02_05.txt, 02_06.txt, 02_07.txt, 02_08.txt, 02_09.txt, 02_10.txt, 03_01.txt, 03_02.txt, 03_03.txt, 03_04.txt, 03_05.txt, 03_06.txt, 03_07.txt, 03_08.txt, 03_09.txt, 03_10.txt, 04_01.txt, 04_02.txt, 04_03.txt, 04_04.txt, 04_05.txt, 04_06.txt, 04_07.txt, 04_08.txt, 04_09.txt, 04_10.txt
Case Name Status Exec Time Memory
01_01.txt AC 119 ms 27368 KiB
01_02.txt AC 113 ms 27080 KiB
01_03.txt AC 114 ms 27084 KiB
01_04.txt AC 113 ms 27152 KiB
01_05.txt AC 114 ms 27080 KiB
01_06.txt AC 113 ms 26976 KiB
01_07.txt AC 116 ms 27080 KiB
01_08.txt AC 114 ms 27204 KiB
01_09.txt AC 116 ms 26964 KiB
01_10.txt AC 111 ms 26968 KiB
02_01.txt AC 117 ms 27328 KiB
02_02.txt AC 111 ms 27404 KiB
02_03.txt AC 112 ms 27156 KiB
02_04.txt AC 111 ms 26892 KiB
02_05.txt AC 115 ms 27240 KiB
02_06.txt AC 115 ms 27228 KiB
02_07.txt AC 112 ms 26924 KiB
02_08.txt AC 117 ms 27536 KiB
02_09.txt AC 115 ms 27320 KiB
02_10.txt AC 115 ms 27452 KiB
03_01.txt AC 116 ms 26792 KiB
03_02.txt AC 115 ms 27884 KiB
03_03.txt AC 129 ms 31620 KiB
03_04.txt AC 126 ms 29476 KiB
03_05.txt AC 115 ms 27648 KiB
03_06.txt AC 162 ms 31584 KiB
03_07.txt AC 244 ms 40688 KiB
03_08.txt AC 154 ms 31756 KiB
03_09.txt AC 251 ms 40500 KiB
03_10.txt AC 248 ms 40736 KiB
04_01.txt AC 114 ms 27160 KiB
04_02.txt AC 114 ms 27548 KiB
04_03.txt AC 824 ms 148028 KiB
04_04.txt AC 2633 ms 592140 KiB
04_05.txt AC 1984 ms 242248 KiB
04_06.txt AC 4248 ms 411692 KiB
04_07.txt AC 2705 ms 242728 KiB
04_08.txt AC 4371 ms 411328 KiB
04_09.txt AC 7560 ms 596804 KiB
04_10.txt AC 7611 ms 597080 KiB
sample_01.txt AC 111 ms 26756 KiB
sample_02.txt AC 114 ms 26652 KiB
sample_03.txt AC 112 ms 27036 KiB
sample_04.txt AC 249 ms 40248 KiB
sample_05.txt AC 393 ms 50488 KiB