문제 보고서에 poj2018 최고의 암소 울타리 솔루션

주제 포털

[제목] 효과

$ N $ 블록 랜드가 상기 제 1 랜드 블록 $ $ $ I $ A_I 암소 적어도 $ $ F. 선택된 나라의 연속 조각되도록이 가축의 최대 수, 각 플롯의 평균.

[분석] 아이디어

이진 변환을 결정하는 단계, 즉 두 개의 평가 MID $ $의 평균 간격이 결정 "$ F $ 서브 세그먼트의 서브 세그먼트 및 음이 아닌 이상, 길이가 있는지 여부." 이 질문은 길이 제한이하는 특별한 장소를 가지고 있으며, 하위 세그먼트에 대한, 우리는 접두사를 해결할 수있는 첫 번째 생각이있을 수 있습니다 :

$$ 최대 \ {(조수 \ 제 j \ 0) sum_i 분의 \ {sum_j의 \} \} (N C의 \의 p <) $$

그러나 이러한 복잡성은 너무 큰, 그래서 우리는 단순화하는 방법을 고려해야합니다. $ $ I가 증가 할 때마다, 즉, 각 후보 세트 $의 분 \ {sum_j의 \} $에 새로운 값을 가질 것이다 $ 1 $ J 범위의 성장으로, 그것은 필요에 따라이 아닌 것으로 J $ $으로 열거주기만큼 최소 전류 레코드 변수, 각 시간은 $ $ 분의 새로운 값은 촬영.

[] 코드 구현

1 #INCLUDE <cstdio>
 2 #INCLUDE <iostream>
 3  #DEFINE RG 등록
 4  #DEFINE의 (나, a가, b)에 대한 (RG의 INT 나 A =; 나는 = B를을 <; 내가 ++) 이동
 (5)를  이용하여  스페이스 성병;
6  CONST의  INT의 N = 100,002 ;
7  A [N], S [N] 나 [N];
8  INT의 N, F;
9  INT 의 main () {
 10      는 scanf ( " %의 D % d에 " , N, F); 이중 maxn = 0 ;
11      이동 (I, 1 , N)는 scanf ( " %의 LF" , A [I]) maxn = 최대 (maxn하는 [I])
 12       리터가 S [N] / N, R = ( 더블 ) maxn;
 13      동안 (RL> 1e- 5 ) {
 14           중간 = (L + R) / 2 ,
 (15)          로 이동 (I, 1 [I]는 [I] - 중간,들 = B, N) [I] =에서 S [I- 1 ] + B [I]
 16           ANS = -N 미네소타 = N;
 17          이동 (I, F, N) {
 18              미네소타 = 분 (미네소타, S [I- F]),
 (19)              = 최대 ANS (ANS, S [I] - 미네소타)
 20          }
 (21)          의 경우 (ANS> =0 ) = L 미드; 다른 R = 중간;
22      }
 23      COUT << INT (R * 1,000 ) << ENDL;
24      반환  0 ;
25 }
코드는 여기 찌를

추천

출처www.cnblogs.com/THWZF/p/11248002.html