"문제 해결"연속

질문 A : 죽여

제한 시간 : 1 초   메모리 제한 : 2백56메가바이트

얼굴 질문


그는 공개적으로 질문을 직면하지 않았다.

문제 해결


알고리즘의 80 %

경주는 긍정적 인 해결책을 기대하지만, 다른의 정확성을 확인하기 위해 더 욕심을 선택하지 않은 경우.

모든 이상한 위해, 우리는 타협 지점 거리의 가치에 무게를 정의합니다.

모두를위한 절반 대답은, 그가 연주 할 수있는 모든 책임을 고려하여 권리는 이상한 놀이의 최대를 선택합니다. 그래서 당신은 이상한 사람들이 남긴 작은 가중치를 시도 할 수 있습니다.

그러나이 중단됩니다. 우측 좀 이상에, 중간에 결제 시점 경우 고려하지만, 소수의 사람들이 비난 왼쪽,

그리고 대답은 우수하지 않습니다 원인, 이상한 잡아 수있는 권리 사람들에게 결제 점에서 상대적으로 가까운 거리를 떠났다.

복잡성 $ O (nmlog) $

100 % 알고리즘

N의 솔루션 플러스 절반 욕심 검증. 사람의 위치와 위치에 일종의 이상한입니다.

최종 응답의 절반입니다. 순서는 모두가 Daguai 순서 할 수있는 청소시기를 확인합니다. 당신은 모든 사람들이 이상한 놀이를 가지고 있는지 확인 할 수 있습니다.

복잡성 $ O (nlog) $

코드 :

#INCLUDE는 <. 비트 / stdc ++ H>
 #define한다 INT RINT 등록
 #DEFINE LL 긴 긴
 #DEFINE () 판독 (A) A = INIT
 사용  스페이스 성병; 
인라인 INT의 초기화 () 
{ 
    INT A = 0 , B = 1 ;  CH = getchar가 ();
    동안 (CH2 < ' 0 ' || CH> ' 9 ' ) { 경우 (CH == ' - ' ) (B) = - 1 , CH = getchar가 ();}
     동안 (CH2> = ' 0 '&& CH <=에서 ' 9 ' ) {A = (a << 3 ) + (A << 1 ) + CH- ' 0 ' , CH = getchar가 ();}
     리턴 는 * B; 
} 
int로 N, M, S, ANS = 0x7fffffff ;
INT의 페이지의 [ 5003 ], Q [ 5003 ], w [ 5003 ];
불리언 힘 [ 5003 ]; 
인라인 LL의 get_dis ( INT의 X, INT의 Y) 
{ 
     1ll의 복근 * (Q [Y] -p [X]) + ABS (Q [Y] - (S)); 
} 
인라인 부울  검사 (LL 중반)
{ 
    INTJ = 1 ;
     (RINT I = 1 ; I <= N; ++ I) 
    { 
        동안 (j <= m) 
        { 
            경우 (get_dis (I, J) <= MID) {J ++; 휴식 ;} 
            J를 ++ ; 
        } 
        경우 ((j의 ==의 m + 1 ) && (나는 < N))
             반환  거짓 ;
        경우 ((j의 ==의 m + 1 ) && (I == N) && get_dis N (m)> MID)
             반환  거짓 ; 
    } 
    반환  사실 ; 
} 
INT ) (메인
{ 
    (S) 판독 (m) 판독 (n)를 판독; 
     (RINT I = 1 ; I <= N; ++ I) 판독 (p [I]);
     (RINT I = 1 ; I <= m; ++ I) 판독 (Q [I]); 
    LL에서 L = 0 , R = 0x7fffffffffffffff ; 
    정렬 (p + 1 , N + P + 1 ), 정렬 방법 (Q + 1 , Q + m + 1 );
    반면 (L <= R) 
    { 
        중간 LL = (L + R) >> 1 ;
        만약 (! 검사 (MID)) L = 중간 + 1 ;
         , R = 미드 1 ;
    } 
    의 printf ( " % LLD \ 없음 " , l);
    반환  0 ; 
}
코드보기

추천

출처www.cnblogs.com/xingmi-weiyouni/p/11606420.html