여름 시험 2 : 게임을 변경 님 (게임 이론)

주제 :

사실, 추가 NIM 게임의 기본은 기회를 잡을 수 없습니다.

다중 스택 돌의 복수 그들이 SG 1 상부 손 승리하면 최대 인 게임 전체의 배타적 OR 값 SG의 SG 값의 출발점, 게임으로 볼 0 플립 승리 할 수있다.

: 키는 어떻게 수요 SG 값입니다 > 게임 상황이 수 - 당신이 법을 찾기 위해 테이블을 재생할 수 있습니다 심지어 측 동적 DFS를 , 그리고 다시 SG 값 DFS 요청 (MEX를 찾고 값을)

상세 사항 : 는 DFS는 갈 수 작은 범위 (가장자리가 너무 많이 있기 때문에, 가능한 도달) 최대 20, 그래서 죽음의주기, 또한 숫자가 너무 큰 돌 수 있습니다 때 자신의 잘못을 의심하지 않는다 .

법 : 돌 수가 홀수 MEX 값이 [I] +1, 짝수, MEX 값 인 [I] -1.

테이블 코드를 재생 :

#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병;
#DEFINE N 25
 #DEFINE M 100005
 INT 통 [분] [N], MEXX [M], 헤드 [M], [M], NEX [M], TOT = 행 0 , 발 [M] ndnum, FL [ 엠];
보이드 추가 ( int로 하는 INT의 [++ TOT] = B와 b) {; NEX [TOT] = 헤드 [A]; 헤드 [A] = TOT 단계; }
 공극 DFS는 ( int로 U)를 
{ 
    경우 (발 [유] == 0 ) ;
    경우 (FL [U] == 0 ) { 
        브로 [ ++ ndnum = 브로 [U]; 
        추가 (U, ndnum); FL [ndnum] = 1; 
        DFS (ndnum); 
    } 
    에 대해 ( int로 I = 0 ; I <= 브로 [U] - 1 ; 내가 ++ ) { 
        브로 [ ++ ndnum = I; 
        추가 (U, ndnum); 
        FL [ndnum] = FL [U]; 
        DFS (ndnum); 
    } 
} 
공극 SG ( INT U) 
{ 
    경우 (발 [유] == 0 ) {MEXX [U] = 0 ; 반환 ; }
     에 대해 ( int로 I = 헤드를 [U] I, I = NEX [I]) {
         INT의 V = 내지 [I];
        SG (V);
        통 [U] MEXX [V] = ; 
    } 
    에 대해 ( int로 I = 0 ; I <가가 = 20 ; 내가 ++ )
     경우 (! 통 [U] [I]) {MEXX [U] = 1; 반환 ; } 
} 
INT 의 main () 
{ 
    위해 ( int로 I = 1 ; i가 <= 10 ; I ++ ) {
         INT의 ID = ++ ndnum; 
        발 [ID] = 1; FL [이드] = 0 ; 
        DFS (ID); 
        SG (ID); 
        의 printf ( " MEX % D % D \ n " , I, MEXX [ID]);
    } 
}

 

법의 코드를 찾기 위해 테이블을 히트 :

#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병;
#DEFINE 줄게 긴 긴
 INT 의 main () 
{ 
    freopen을 ( " nim.in " , " R " , 표준 입력); 
    freopen을 ( " nim.out " , " w " , 표준 출력);
    INT T, N하는; 
    scanf와 ( " %의 D ' , T);
    반면 (T-- ) { 
        는 scanf ( " %의 D ' , N); 
        는 scanf ( "" , & A )
         경우 (a & 1 )를 ++, 다른 장음을 , 
        LL ANS = A는;
         위해 ( int로 I = 2 ; 나는 <= N; I ++는 ) { 
            는 scanf ( " %의 D를 " A, & )
             경우 (a & 1 )를 ++ ,
             다른 장음 , 
            ANS ^ = a 및 
        } 
        경우 (ANS)의 printf ( " \ A 않음 " ),
         다른 원인 의 printf ( "B \ 없음 " ); 
    } 
} 
/ * 
2 
2 
1 2 
2 
2 2 
* /

 

추천

출처www.cnblogs.com/mowanying/p/11402738.html