겉으로 폭력 열거 폭력은 실제로 열거 타이틀 (욕심을 조금 추가)된다
주제 :
후 11 일 모든 거리를 가로 챌 성공적으로 할 수있는 미사일의 작업 반경을 초과하지 않는로 올해는 낮은 프로파일을 유지, 국가는 새로운 미사일 요격 시스템을 개발했다. 작업 반경의 경우 0 0, 다음이 가능 똑같은 위치는 미사일을 차단하도록한다. 그러나, 미사일 요격 시스템은 또한 단점이있다 : 각 시스템은 반경 작업을 하루에 한 번 설정할 수 있습니다. 하루 사용 비용은 작업 및 모든 시스템의 반지름의 제곱입니다.
어느 날, 레이더 들어오는 적의 미사일을 집어 들었다. 시스템이 실험 단계에 아직도 있기 때문에, 그래서 단지 두 시스템이 작동합니다. 현재의 요구 사항은 모든 미사일을 요격하는 경우, 그 날의 최소의 비용을 계산하는 데 사용하십시오.
최대 데이터 범위 :
데이터, 1≤N≤100000, 모든 구성 요소의 절대 좌표의 100 %가 1000을 초과하지
우선, 제곱의 차이를 조정하고 직접 저장 될 수있는 데이터 방송의 제목 및 범위를 참조한다 (즉, 두 점 화학식 사이의 거리의 제곱)의 폭발 아니지만, 단지 좌표를 저장하지 않고, 거리와 두 차단 시스템을 저장한다.
둘째, 다음, 정확성을 보장하지 않습니다 최근 사용에서이 미사일을 고려하다 두 점 사이의 거리, 비교 시점의 깎아 지른듯한 거리 주어진 알고리즘 문제를 고려
지점이 가까이에서, 그러나 미사일을 포함 차단의 관점에서 미사일 1이있을 수 있습니다 아마도 때문에, 2 가로 채기는 점 범위를 업데이트 할 필요가 없습니다
다음 제언을 고려한다
차단 시스템의 제 1 세트로부터의 거리에 따라 분류하면, 제 시스템의 범위를 전면 K 점을 차단하도록 제 k 점의 거리를 가로 챌 수 있도록 단거리 내지 제 K 점 때문에
그런 점 점, 최대 값을 복용의 두 번째 차단에서 위의 과정에서 열거 프로세스는, 그렇지 않으면 모든 지점을 차단하는 것은 불가능합니다
코드 :
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; INT의 N; 구조체 노드 { INT의 DF, DS; 노드 () { DF = 0 ; DS = 0 ; } } ND [ 100005 ]; 구조체 알 { INT의 X, Y; } Fi 접속 (SC); 인라인 부울 CMP ( CONST 노드 A, CONST 노드 b) { 복귀 a.df < b.df; } 인라인 의 INT DIS를 ( BOOL NUM,CONST의 INT 및 X, CONST의 INT 및 Y) { 경우 (! NUM) 창 (X-fi.x) * (X-fi.x) + (Y-fi.y) * (Y- fi.y); 경우 (NUM) 창 (X-sc.x) * (X-sc.x) + (Y-sc.y) * (Y- sc.y); } INT 의 main () { 는 scanf ( " % D % D % D % D " , fi.x, fi.y, sc.x, sc.y); scanf와 ( " %의 D ' , N); 위한 ( int로 I = 1 ; i가 <= N; 내가 ++ ) { int로 를 B; scanf와 (" % d 개 %의 D ' , A, 및 B); ND [I] .df = DIS ( 0 , A, B); ND [I]의 .DS =의 DIS ( 1 , A, B); } 정렬 (ND + 1 , ND + 1 + N, CMP); int로 I = N; INT ANS = 2147483647 ; INT maxn = 0 ; 동안 은 (i> = 1 ) { maxn = 최대 (maxn, ND [I + 1 ] .DS); ANS = 분 (ND [I] + .df maxn, ANS); 전 - ; }의 printf ( " % D \ 없음 " , ANS); 반환 0 ; }