그냥 오래된 퍼즐 (2019 멀티 - 학교, 1007)

문제 설명
당신은 15 개 수의 세포와 빈 셀로 구성된 4 × 4 격자를, 주어진다.
모든 수치는 고유하고 (15) (1)로부터 원거리
빈 셀에 이동할 수있는 빈 셀과 인접 셀이 보드.
당신의 작업은 아래 그림과 같이 대상 그리드에 입력 그리드를 만드는 것입니다.
다음의 예 (샘플 입력)에서는 두 개의 이동에서 대상 그리드를 얻을 수 있습니다.
 

 

입력
첫 번째 라인은 테스트 케이스의 수를 나타내는 정수 T (1 <= T <= 10 ^ 5)을 포함한다.
각 시험은 각각 네 줄, 네 개의 공간 분리 된 정수를 포함하는 입력을 나타내는 격자로 구성된다. 0은 빈 셀을 나타냅니다.
 

 

산출
각 테스트 케이스의 경우, 한 줄에 답을 인쇄 할 수 있습니다.
당신은 120 개 이동에서 대상 그리드를 얻을 수없는 경우 '없음', 다른 인쇄 '예'를 인쇄 할 수 있습니다.
 

 

샘플 입력
2 1 2 3 4 5 6 7 8 9 10 0 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 11 12 13 15 14 0
 

 

샘플 출력
예 아니오

 결론 : 소 풀수 문제 : 빈 또는 역순의 수의 패리티의 현재 값을 결정할지 여부를 현재의 라인 간격의 패리티

코드 :

#INCLUDE <cstdio> 
#INCLUDE <iostream> 
#INCLUDE <알고리즘> 
#INCLUDE <CString을> 
#INCLUDE <큐> 
#INCLUDE <적층> 
#INCLUDE < 설정 > 
#INCLUDE <지도> 
#INCLUDE <벡터> 
#INCLUDE <cmath> CONST의 INT maxn 1E5 + = 5 ; 
타입 정의 LL;
사용하는 네임 스페이스 표준을;
int로 A [ 25 ];
INT의 CC [ 25 ];
INT 의 main () 
{ INT

   
    티; 
    CIN >> T;
    INT의 K = 0 ; 

    반면 (T-- ) 
    { 
        INT에서 CNT = 0 ;
         ( INT의 t = 0 ; t < 4 ; t ++ ) 
        { 
             ( INT의 J = 0 ; J < 4 ; J ++ ) 
            { 
                는 scanf ( " %의 D ' , A [t의 * 4 + J]);
                경우 (a [t * 4 + J]! = 0 )
                { 
                    CC [CNT는 ++]는 [t * = 4 + J를]; 
                } 
                경우 (a [t * 4 + J] == 0 ) 
                { 
                    K = t; 
                } 
            } 
        } 
    INT의 합 = 0 ;
     ( INT의 t = 0 ; t < 15 ; t ++ ) 
    { 
         ( INT J = t + 1 , J < 15 ; J ++ ) 
        { 
            경우 (CC [J] <공통 [의 t]) 
            {  ++ ; 
            } 
        } 
    } 
    
    경우 ((( 3 -k) % 2 ) ^ (% 합 2 ) == 0 ) 
    { 
        둔다 ( " " ); 
    } 
    다른 
    { 
        풋 ( " 아니오 " ); 
    }     
    } 
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/Staceyacm/p/11278588.html