땅따먹기

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

요약
무한 격자에서 원점 하나에 0이 적힌 상태로 시작해, 매 회마다 0이 적힌 칸 하나를 1로 바꾸며 이웃에 0을 퍼뜨릴 때 N회 후 1의 개수를 정확히 K로 만들 수 있는지 판정한다.
난이도

어려움10점 중 8점

유형
수학, BFS, 시뮬레이션, 그리디
정답자
아직 제출이 없습니다

문제

무한히 넓은 좌표평면이 있다. 초기에는 (0,0)(0,0)에 00이 적혀있고, 나머지 정수 좌표에는 아무 값도 적혀 있지 않다.

당신은 큐를 이용해 아래의 행동을 NN번 수행하려고 한다. 초기에 큐는 비어 있다.

  1. 00이 적혀 있는 좌표 중 11개를 골라서, 해당 좌표를 큐에 넣는다.

  2. 아래의 행동을 차례대로 수행한다.

    • 큐의 맨 앞에서 좌표 11개를 꺼내고, 꺼낸 좌표에 11을 적는다.
    • 꺼낸 좌표와 상하좌우로 인접한 정수 좌표 중, 00이 적혀 있는 모든 정수 좌표를 큐의 맨 뒤에 넣는다. 큐에 좌표를 넣는 순서는 결과에 영향을 주지 않는다.
    • 꺼낸 좌표와 상하좌우로 인접한 정수 좌표 중, 아무 값도 적혀 있지 않은 모든 좌표에 00을 적는다.
  3. 큐가 빌 때까지 2.2.을 반복한다.

행동을 어떤 방식으로 수행하더라도, 한 좌표는 큐에 최대 한 번만 들어감을 증명할 수 있다.

행동을 NN번 수행했을 때, 11이 적힌 좌표의 개수가 정확히 KK가 될 수 있는지 판별해 보자.

입력

첫 번째 줄에 테스트 케이스의 수를 의미하는 정수 TT가 주어진다. (1≤T≤100)(1\leq T\leq 100)

각 테스트 케이스마다 행동의 횟수를 의미하는 정수 NN, 11이 적힌 좌표 개수의 목표를 의미하는 정수 KK가 공백으로 구분되어 주어진다. (1≤N,K≤109)(1\leq N, K\leq 10^9)

출력

각 테스트 케이스마다 11이 적힌 좌표의 개수가 정확히 KK가 될 수 있다면 YES를, 그렇지 않다면 NO를 출력한다.

힌트

큐는 \[q_1,q_2,⋯ ,q_n]\[q\_1, q\_2, \cdots, q\_n]으로 표현되는 자료구조입니다. 큐에 원소 aa를 넣으면, 큐는 \[q_1,q_2,⋯ ,q_n,a]\[q\_1, q\_2, \cdots, q\_n, a]가 됩니다. 큐에서 원소를 꺼내면, q_1q\_1를 얻고 큐는 \[q_2,q_3,⋯ ,q_n]\[q\_2, q\_3, \cdots, q\_n]이 됩니다.

예제1

  1. 예제 1

    입력
    3
    3 4
    15 1
    5 5
    
    예상 출력
    YES
    NO
    YES