Codeforces 라운드 # 593 (사업부. 2) D. 앨리스와 인형

주제 : http://codeforces.com/problemset/problem/1236/D
아이디어 : 앞으로 나아갈 수있는 현재의 방향에서 가장 먼이 제한하므로 로봇은 법을 따를 수 → ↓ ← ↑ 이동, 오른쪽은 가장 먼 도달 켠 다음 캔은 시뮬레이션 → ↓ ← ↑ 모든 이동 제한 갱신 후 단부가 이동 될 수 없다 (제 1 운동은 회전 수, 오른쪽 N * m에있어서 그 방향으로 더 이동하고, 이와 같이하지 ) INT 버스트 것
          장벽이 세트로 존재하는 각각의 절반은 한계에 비해 가장 먼 장소에 도달하고자하고,

#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; #DEFINE PB와 push_back
 #DEFINE 인터넷 제
 #DEFINE는 제 SE는
 #DEFINE의 MEM을 (I, J)가 memset (I, J,는 sizeof (I)) 
의 typedef LL; 
쌍 타입 정의 < INT , INT > PII; CONST INT maxn 1E5 + = 5 ; 
LL N, m; INT K;
int로 A, B 단계;
설정 < INT > [maxn]를 X [maxn, 예를; int로 주 () 
{ 
    는 scanf ( " % I64d % I64d % D
 
 
 

  
 
 
 

 
" , N, m, , k)에
     대해 ( INT 나 = 1 ; I <= K; I ++ ) 
    { 
        는 scanf ( " % D % D ' , A, 및 B)를 
        X [A]를 취소하려면 (b); 
        를 취소하려면 [B], Y (a) 
    } 
    의 INT 턴 = 1 ;
     INT XX = 1 , YY = 1 ; 
    LL CNT = 1 ;
     INT t;
     INT 말괄량이 = 2 , 맥스 = N, MINY = 1 , MAXY = m;
     하지만 ( 1 )
    { 
        경우 (회전 == 1 ) 
        { 
            t = YY; 
            그것은 자동 = X [XX] .lower_bound (YY);
            경우 (IT == X [XX] .END ()) YY = m;
            다른 YY = IT- * 1 ;
            경우 (YY> MAXY) YY = MAXY; 
            MAXY = YY- 1 ;
            만약 (t-YY == 0 ! && XX = 1 && YY =! 1 ) 체류 ; 
            CNT + = YY- t; 
        } 
        다른  경우 (회전 == 2) 
        { 
            t = XX; 
            자동차는 = Y [YY] .lower_bound (XX)를;
            경우 (IT == Y [YY] .END ()) XX = N;
            다른 XX * IT- = 1 ;
            경우 (XX> 맥스) = XX 맥스; 
            맥스 = XX 분 1 ;
            만약 (t-XX == 0 ) 체류 ; 
            CNT + = XX 일 t; 
        } 
        다른  경우 (== 설정 3 ) 
        { 
            t =  YY;
            그것은 자동= X [XX] .lower_bound (YY);
            경우 (이것은 == X [XX] .begin ()) YY = 1 ;
            다른 YY = * (- IT) + 1 ;
            경우 (YY <MINY) YY = MINY; 
            MINY = YY + 1 ;    
            만약 (t-YY == 0 ) 휴식 ; 
            CNT + = T- YY; 
        } 
        다른  경우 (회전 == 0 ) 
        { 
            t = XX; 
            자동차는 = Y [YY] .lower_bound (XX)를;
            만약 (IT == Y [YY] .begin ()) XX = 1 ;
            다른 XX = * (- 그것을) + 1 ;
            경우 (XX <말괄량이) = XX 말괄량이; 
            말괄량이 = XX + 1 ;
            만약 (t-XX == 0 ) 체류 ; 
            CNT + = T- XX; 
        } 
        경우 (CNT == * N MK) {의 printf ( " 예 \ n " ); 반환  0 }  = (턴 + 1 ) % 4 ; 
        
    } 
    의 printf ( " 없음 \ n ");
    반환  0 ; 
}

추천

출처www.cnblogs.com/c4Lnn/p/12091033.html