E - 지뢰 찾기 HDU - 5965 (루프에 대한 간단한)

제목 : CNR 및 지뢰 찾기 Xiaolu 퍼즐 특히 좋아하고, 그녀의 두 자신을 구출 수 없습니다 중독 가장 최근. 
게임의 인터페이스는 매트릭스, 더 광산을 Sublattices없는 격자 일부 광산의 행렬이다. 게임, 그리드 알려진이며, 알 수없는 상태가 될 수 있습니다. 그리드가 공지 된 광산은이를 그리드에 기록 될되지 않으면 한자리이 그리드 연결 인접하는 8 개의 격자 광산의 총 수를 나타내고있다. 
게임은 CNR 및 Xiaolu 3 행 N 열의 중이다 (모두 시작과 연속적인 양의 정수 번호로부터) 않았다 행렬이 행렬의 모든 공지 된 격자의 두 번째 행 및 광산, 다른 두 줄 알, 및 상기 광산의 갯수가 알려지지된다. 
CNR 및 Xiaolu는 광산의 부설의 라인 1 라인 3 얼마나 많은 합법적 인 프로그램을 알고 싶어요.

복수의 세트를 포함하는 입력 테스트 데이터, 양의 정수 T의 첫번째 행은 데이터 세트의 수를 나타낸다. 
단지 N 비 빈 문자열의 숫자의 길이만큼 각 데이터 열은 세 개의 행과 N 열, 내가 격자 i 번째 행 번호 2 행렬을 나타내는 영숫자의 문자열을 나타내는 행렬있다. 
해당 문자열 길이 N을 확보하기 <= 10000 데이터 세트의 수 <= 100. 
단 하나 개의 숫자 줄에 출력 결과 배치 광산 mod100,000,007 프로그램의 수를 나타냅니다.

샘플 입력

2 
22 
000

샘플 출력

6 

아이디어는 세 가지 경우가 첫 번째 행에서 시작 (0,1,2) 광산
과거에 하나 열거 하나
한 두 번째 행의 첫 번째 열은 또한 당신이 결정할 수있는 다음 결정하기 위해 식별 할 수있는
나는 2 점을 워싱턴을 마지막으로 하나 더 솔루션 (I> 3주의 지불하지 않은) 한이 시점에서, 탈옥 것 <0>이 광산을 넣어 얼굴 현재이 결정하지 않았다
코드 :
#INCLUDE <비트 / stdc ++ H.>
 사용  스페이스 성병;
#DEFINE가 긴 긴 줄게
 #DEFINE 개조 100,000,007
 INT ) (주 
{ 
    int로 I, J, N, m, t; 
    IOS :: sync_with_stdio ( 거짓 ); 
    CIN >> t;
    반면 (t-- ) 
    { 
        스트링 들; 
        CIN >> S;
        INT의 플래그 = 1 ;
        int로 A [ 10005 ];
         (I = 0 ; S [I]가, 난 ++ ) 
        { 
            A [i]를S = [I] - ' 0 ' ;
            경우 (a [ 0 ]> 4 ) 플래그 = 0 ;
            경우 (a [I]> 6 ) 플래그 = 0 ; 
        } 
        경우 (플래그 == 0 ) 
        { 
            COUT << 0 << ENDL;
            계속 ; 
        } 
        INT의 F [ 10005 ], X [ 10005 ];
        INT LEN = s.size (), 마지막; 
        LL 합 = 0 , ANS;
        ...에 대한(J = 0 ; J <= 2 , J는 ++ ) 
        { 
            memset 함수 (F, 0 , sizeof의 (F)); // 레이놀즈 번호를 넣어 
            memset 함수 (X, 0 , sizeof의 (X는)); // 여러 광산이 걸릴 
            마지막 J =; // 제 선 열 
             (I = 0 ; I 렌 <; I는 ++ ) 
            { 
                F [I] = 마지막; // 넣어 
                IF를 (I는 == 0 ) X [I]는 [I]를 = -f [I]는; // 또한 
                다른 X [I]은 [I] -f [I] -f [= I- . 1 ] // 또한
                마지막의 = X [I];
                경우 (지난 < 0 || 마지막> 2 ) 휴식 ; 
            } 
            LL ANS = 0 ;
            경우 (I == LEN && X [I- 1 ] == 0 ) 
            { 
                ANS = 1 ;
                 (I = 0 ; I <렌; 내가 ++) 의 경우 (F [I] == 1 ) ANS ANS * = 2 %의 모드; 
            }  = ANS %의 개조 + 합 % 개조; 
         }
        COUT << 합 %의 개조 << ENDL; 
    } 
}
코드보기

 

추천

출처www.cnblogs.com/ydw--/p/11300053.html