최고의 암소 울타리 (반)

농부 존의 농장은 N (1 <= N <= 100,000) 분야의 긴 행으로 구성되어 있습니다. 각 필드는 젖소의 특정 번호를 포함, 1 <2000 = ncows <= 

FJ 그 블록 내에서 필드 당 젖소의 평균 수를 극대화하기 위해 이러한 필드의 연속 그룹 주위에 울타리를 구축하고자합니다. 블록을 포함해야 적어도 F (1 <= F <= N) F는 입력으로서 주어진 필드. 

제약 주어진 평균을 극대화 울타리의 위치를 계산합니다. 

기입

* 선 1 개의 공간 분리 정수, N 및 F. 

* 라인 2..N + 1의 각 행은 하나의 정수이고, 소 필드의 수를 포함한다. 2 호선 3 호선 필드 2의 수를 제공, 등, 필드 1에서 젖소의 수를 제공합니다.

수출

* 1 호선 : 1000 시간은 최대 average.Do 단지 1000 * ncows / nfields 인 정수를 인쇄, 반올림 수행하지 않습니다 하나의 정수입니다.

 

문제 해결 방안을 : 타이틀의 길이보다 크거나 각 이진수 1E6 절반 접두사 및 판정을 시작 길이 L의 평균으로부터 감산되어 ~ I는 1E6로부터 시작하는 연속 최대 평균 F 찾을 동일한 의미 최소값을 감산하기 전에 볼 IL 0보다 크지

 

1 #INCLUDE <iostream>
 2 #INCLUDE <cstdio>
 3 #INCLUDE <CString을>
 4 #INCLUDE <알고리즘>
 5  #DEFINE의 EPS를 1E-6
 6  이용  스페이스 성병;
7  CONST  이중 INF = 0x3f3f3f3f * 1.0 ;
8  INT의 N, m;
9 개   도착 [ 100005 ];
10   합 [ 100005 ];
11  
12  부울 검사 ( 이중 NUM) {
 13       미네소타 =INF]
 14       ( INT I = 1. ; I <= N-; I는 ++ ) {
 15          SUM [I] = SUM [I- 1. ] + ARR은 [I] - NUM;
 16      }
 . 17      ANS;
 18 인      위해 ( INT I = m; I <= N-; I ++) {   /// 0 이상일 m 동일보다 크지 않은 길이를 참조 
19.          미네소타 = 분 (미네소타, SUM [IM])   // 최소 이전 IM 
(20)가          ANS = SUM [ I] -m;    //
 21은          IF (ANS> = 0 )  에 해당하는 ]    // 이 달성 평균 
22      }
(23)      돌아  거짓 ;
24  }
 25  
26  공극 계산 () {
 27       왼쪽 1e- = 6 ;
28       우측 = 1E6;
29 일      동안 (왼쪽 + EPS < 오른쪽) {
 30           중간 = (좌측 + 우측) / 2 ;
31 일          경우 (체크 (MID)의) 왼쪽 = 미드;
(32)          다른 권리 = 중간;
33      }
 34      의 printf ( " % D \ 없음 " ( INT ) (오른쪽 * 1000 ));
35  }
 36  
37  
38  INT 의 main () {
 39      는 scanf ( " %의 D % d에 " , N, m);
(40)      에 대한이 ( int로 I = 1 (scanf와에게 내가 ++; i가 N = <) " %의 LF을 " & 도착 [I]);
41      계산 ();
42      반환  0 ;
43 }
코드보기

 

추천

출처www.cnblogs.com/qq-1585047819/p/11256543.html