주제 : 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 ; }