큐브 UVA10601 폴리 -A 定理

주제 링크

 

해결책

 

튜플은 $ (난 J) $ 사이클 부,주기 수의 수를 나타낸다. (등가 클래스 K 및 고정 용량 클래스라는 수학 조합?)
상수 대체 : $ 1 * (1,12) $
무게 중심 + $ 90 : 3 * (4,3) $
얼굴 중심 $ -90 : 3 * (4,3) $
$ 무게 중심 (180) : 3 * (2,6) $
对棱 $ 180 : 6 * [(2,5) + (1,2) $
체심 $ 120 : 4 * (3,4) $
체심 $ 240 : 4 * (3,4) $
 
그리고 남은 문제는 이러한 등가 클래스의 내부의 색으로 채우는 방법입니다
고려 차별화 된 컬러 공, 상자 고려 등가 클래스에서 차이가 없습니다하는 조합 문제
 
/ * 
    튜플 (난, j)는 단면의 사이클 수, 사이클 수, 고정 용량 형 K 등가 클래스와라는 수학 조합 나타내는 
    1 * (1, 12) : 일정한 변위 
    면심 + 90 : 3 * (4,3) 
    -90 얼굴 중심 : 3 * (4,3) 
    3 * (2,6)면 (180)을 중심 
    (180)는 리브 : 6 * [(2,5) + (1,2)] 
    체 중심 120 : 4 * (3,4) 
    체심 240 : 4 * (3,4) 
* / 
#INCLUDE <알고리즘> 
#INCLUDE <cctype> 
#INCLUDE <cmath> 
#INCLUDE <cstdio> 
#INCLUDE <cstdlib> 
#INCLUDE < CString을> 
사용법 #include <iostream> 
사용법 #include <지도> 
사용법 #include <큐> 
사용법 #include < SET > 
사용법 #include <스택>
 의 #if__cplusplus> = 201103L 
#INCLUDE <unordered_map도> 
#INCLUDE <unordered_set>
 #endif 다음 
#INCLUDE <벡터>
 #DEFINE의 LSON의 RT << 1,1- 중간
 #DEFINE의 rson의 RT << 1 | 1, 중간 + 1, R
 #DEFINE LONG_LONG_MAX 9223372036854775807LL
 #DEFINE LL LL
 사용하여  네임 스페이스 표준; 
타입 정의  LL; 
타입 정의  더블 LD; 
타입 정의 부호없는  날개 펼진; 
쌍 타입 정의 < INT , INT > P;
INTN, M, K;
CONST의  INT maxn 1E5 + = 10 ;
int로 A [ 7 ], B [ 7 ]; 
인라인 LL의 FAC (LL 않음) 
{ 
    LL 입술 = 1 ;
    위한 ( int로 I = 2 ; 나는 <= N; ++ i가 ) 
        된 RE * = I;
    반환 입술을; 
} 
인라인 LL의 C (LL N, LL의 m) 
{ 
    경우 (N < M)
         복귀  0 ;
    반환 FAC (N)에 / (FAC (m) * FAC (N - m)); 
} 
인라인 게요 작은 동전 ( INTK) 
{ 
    memcpy가 (B, A, 는 sizeof a);
    INT의 그룹 = 0 ;
    위한 ( int로 I = 1 ; i가 = < 6 ; 내가 ++ ) 
    { 
        경우 (b [I] %의 K)
             복귀  0 ; // 不能完全以K划分 
        [내가] / B = K; 
        그룹 + = B의 [I]; 
    } 
    LL 입술 = 1 ;
    위한 ( int로 I = 1 ; i가 = < 6 I ++; )  
    {
        입술을* = C (그룹 B [I]); 
        그룹 - =의 B [I]; 
    } 
    반환 입술을; 
} 
인라인 () 해결하는 것이다 
{ 
    LL 입술 = 0 ; 
    입술 + = 작은 동전 ( 1 );         // 不动置换 
    입술 + = 2 * 3 * 작은 동전 ( 4 ); // 面心+ 90 -90 
    입술 + = 3 * 작은 동전 ( 2 );     // 面心(180) 
    에 대해 ( int입니다 I = 1 ; i가 = < 6 ; 내가 ++ )
         에 대해( INT의 J = 1 ; J <= 6 , J ++ ) 
        { 
            경우 ((I, J == && A [I] < 2 ) || (I = J && (a [I] || !!! A [J] )))
                 계속 ; 
            A [I] - A [J] - ; 
            입술 + = 6 * 작은 동전 ( 2 ); // 对棱180 
            A [i]를 ++, A [J] ++ ; 
        } 
    입술 + = 2 * 4 * 작은 동전 ( 3 ); // 体心+ 120, -120 
    복귀 입술 / ;24 
} 
INT 본체 ( 의 INT 는 argc,  CONST * 는 argv []) 
{ 
#ifndef ONLINE_JUDGE 
    freopen을 ( " in.txt " , " R " , 표준 입력); 
    freopen을 ( " out.txt " , " w " , 표준 출력);
#endif 다음 
    IOS :: sync_with_stdio ( 거짓 ); 
    cin.tie ( 0 ); 
    cout.tie ( 0 );
    INT의 t; 
    CIN >> t;
    반면 t-- ()
    { 
        memset 함수 (a, 0 , sizeof 연산자 a);
        위한 ( int로 I = 0 ; I는 < 12 ; i가 ++ ) 
        { 
            INT (X)를; 
            CIN >> X; 
            A [X] ++ ; 
        } 
        COUT <<) (<< 해결 " \ 않음을 " ; 
    } 
    반환  0 ; 
}
코드보기

 

추천

출처www.cnblogs.com/mooleetzi/p/11431006.html