아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

카드 뒤집기 게임

시간 제한1초메모리 제한1024 MB

요약
N×N 목표 패턴과 정수 M이 주어질 때, 고른 행이나 열에서 M의 배수 위치만 뒤집는 연산을 반복해 모든 칸이 X인 상태에서 목표 패턴을 만들 수 있는지 판정한다.
난이도

보통10점 중 7점

유형
수학, 구현, 행렬, 정수론
정답자
아직 제출이 없습니다

문제

카드 뒤집기 게임은 혼자 하는 카드 게임으로, 두 종류의 카드 A, B를 사용한다. 카드 A에는 게임에 적용할 규칙이 적혀 있다. 구체적으로 그림 1과 같이 두 정수 NN과 M(≤N)M(\le N), 그리고 N×NN \times N 격자 형태로 문자 'O'와 'X'가 배치된 패턴 PP가 적혀 있다.

그림 1

카드 B는 앞면에 문자 'O', 뒷면에 문자 'X'가 적힌 카드다. 카드 B 한 장은 카드 A에 적힌 패턴의 문자 하나를 나타내는 데 쓰이며, 이를 위해 충분히 많은 수의 카드 B가 준비되어 있다.

게임을 시작하자. 먼저 카드 A를 하나 고르고, 그 카드에 적힌 NN 값에 따라 N×NN \times N 격자 형태로 카드 B를 배치한다. 처음 배치하는 카드는 모두 'X'가 보이도록 놓아야 한다. 배치된 각 카드는 그림 2처럼 행과 열의 번호로 구분한다.

그림 2

카드의 초기 배치가 끝나면 플레이어는 아래에 설명하는 '뒤집기'를 필요에 따라 반복한다. 한 번의 '뒤집기'는 두 단계로 이루어진다.

  • 단계 1: 카드가 놓인 N×NN \times N 격자에서 임의의 한 행 또는 한 열을 선택한다. 또한 카드 A에 적힌 정수 MM에 따라 임의의 정수 k(0≤k<M)k(0 \le k < M)를 선택한다.
  • 단계 2: 단계 1에서 선택한 것이 행 ii라면, j≡k(modM)j \equiv k \pmod{M}인 모든 jj에 대해 격자 상에서 (i,j)(i,j) 위치에 있는 카드를 모두 뒤집는다. 마찬가지로 단계 1에서 선택한 것이 열 jj라면, i≡k(modM)i \equiv k \pmod{M}인 모든 ii에 대해 격자 상에서 (i,j)(i,j) 위치에 있는 카드를 모두 뒤집는다.

플레이어는 '뒤집기'를 반복해서 격자에 놓인 카드의 패턴과 카드 A에 그려진 패턴 PP를 일치시켜야 한다. 이것이 실제로 가능한지 판별하자.

제한

  • 1≤M≤N≤1 0001 \le M \le N \le 1\,000
  • PP에 속한 모든 문자는 'O' 또는 'X' 이다.

예제1

  1. 예제 1

    입력
    1 1
    O
    
    예상 출력
    YES