그냥 오래된 퍼즐 (법) HDU - 6620

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

제 InputThe 라인 테스트 케이스의 수를 나타내는 정수 T (1 <= T <= 10 ^ 5)을 포함한다.
각 시험은 각각 네 줄, 네 개의 공간 분리 된 정수를 포함하는 입력을 나타내는 격자로 구성된다. 0 당신이 한 줄에 답을 인쇄 할 수 있고, 빈 cell.OutputFor 각 테스트 케이스를 나타냅니다.
당신은 120 개 이동에서 대상 그리드를 얻을 수없는 경우 '없음', 다른 인쇄 'Yes'.Sample 입력 인쇄

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

샘플 출력


아니오
 
질문의 의미 : 잘 이해한다
분석은 두 개의 디지털 게임 상황에 홀수 때까지 때만 N-1 번 요소 (공간 상관없이) 기록 라인 수열 * N의 두 가지 상황에서 그리드 역방향 번호의 숫자 동일한 홀수. 결론은 또한 확장 될 수 있습니다
n은 짝수이고, 최대 두 상황 경우에만, 기입 순서 때 역방향 수의 차이 두 공간 상황 여기서 동일한 패리티 행의 수 사이의 차이. 요약하면, N * m의 디지털 풀수 문제 판정에서, 역방향의 정렬이 해결하고자 병합로 전환시킬 수있다.
 
AC 코드 :
1 #INCLUDE <iostream>
 2 #INCLUDE <CString을>
 3 #INCLUDE <cstdio>
 4 #INCLUDE <알고리즘>
 5  이용  스페이스 성병;
6  CONST의  INT maxn 1E5 + = 10 ;
7  #DEFINE LL 긴 긴
 8  #DEFINE INF 0x3f3f3f3f
 9  INT의 T, N;
10  INT A [ 20 ];
11  
(12)  INT 의 main () {
 13      는 scanf ( " %의 D ' , T);
14 일      동안 (T--) {
 15          INT의 입술, ANS = 0 ;
(16)          에 대한이 ( int로 I = 1 ; i가 <= 16 ; I ++ ) {
 17              는 scanf ( " %의 D " , & A [I]);
18              의 경우 입술 = 입 / (a [i]를!) 4 + (I % 4 ? 1 : 0 );
19              다른 {
 20                   ( INT의 J = 1 ; J <I, J ++ ) {
 21                      의 경우 (a [J]!) 계속 ;
(22)                      다른 경우 (a [J]>은 [I]) ANS ++ ;
23                  }
 24              }
 25          }
 26          의 경우 (( 4 -res) % 2 == ANS % 2 )의 printf ( " 예 \ n을 " );
(27)          다른 사람의 의 printf ( " 없음 \ n을 " );
28      }
 29  
30  
31      복귀  0 ;
32 }

 

추천

출처www.cnblogs.com/Bravewtz/p/11360165.html