/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 55ms 21.516 MiB
#2 Accepted 142ms 33.703 MiB
#3 Accepted 168ms 34.258 MiB
#4 Accepted 137ms 33.711 MiB
#5 Accepted 58ms 23.633 MiB
#6 Accepted 52ms 21.418 MiB
#7 Accepted 127ms 33.762 MiB
#8 Accepted 127ms 33.793 MiB
#9 Accepted 52ms 21.422 MiB
#10 Accepted 55ms 23.742 MiB
#11 Accepted 104ms 33.535 MiB
#12 Accepted 109ms 33.695 MiB

Code

#!/usr/bin/env python3
import sys
import math
import random
import os
from io import BytesIO, IOBase

FAST_IO_BUFSIZE = 8192


class FastIO(IOBase):
    newlines = 0

    def __init__(self, file):
        self._file = file
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None

    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, FAST_IO_BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()

    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, FAST_IO_BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()

    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)


class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")


sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")

def m(x: int) -> int:
    return 1 << x


class solution:
    lim = 2 * 10**5 + 5
    end_states = []

    def __init__(self) -> None:
        pass

    def solve(self) -> None:
        self.end_states.append(m(0) | m(1) | m(2))
        self.end_states.append(m(3) | m(4) | m(5))
        self.end_states.append(m(6) | m(7) | m(8))

        self.end_states.append(m(0) | m(3) | m(6))
        self.end_states.append(m(1) | m(4) | m(7))
        self.end_states.append(m(2) | m(5) | m(8))

        self.end_states.append(m(0) | m(4) | m(8))
        self.end_states.append(m(6) | m(4) | m(2))
        n = int(input())
        for _ in range(n):
            self.solve_case(_)

    def solve_case(self, cs) -> None:
        board = 0
        for x in range(3):
            line = str(input().strip())
            for x in range(3):
                board = board << 1
                if line[x] == "X":
                    board |= 1
        print("Game #{}: ".format(cs + 1), end="")
        print("Alice" if self.winner(board) else "Bob")

    def winner(self, board):
        ret = False
        if self.game_over(board):
            return True
        for i in range(9):
            if (board & m(i)) == 0:
                ret |= not self.winner(board | m(i))
        return ret

    def game_over(self, board):
        for x in self.end_states:
            if (board & x) == x:
                return True
        return False

if __name__ == "__main__":
    solution().solve()

Information

Submit By
Type
Submission
Problem
P1089 Game of Tic Tac Toe
Language
PyPy 3 (Python 3.9.18 PyPy 7.3.15)
Submit At
2024-10-20 20:35:46
Judged At
2024-11-11 02:36:31
Judged By
Score
100
Total Time
168ms
Peak Memory
34.258 MiB