FESTIVAL문제 질문입니다!

  • User Avatar
    rlagptnr67

    [[problem:FESTIVAL]]

    알고스팟 입문자입니다:)
    FESTVAL문제를 풀었는데, 제출하면 자꾸 오류가나네요ㅠㅜ
    예외를 발견하지 못하여 이렇게 질문하게 되었습니다.

    문제를 푼 방법은
    1. 인덱스 x부터 오른쪽으로 team의 수만큼 합을 avg[x]배열에 저장.
    2. x-1>=0 이고, x-1을 더한 평균값이, 더하지 않은 평균값 보다 작을경우, avg[x]에 avg[x-1]을 더해줌.
    3. 오른쪽도 이와같이.
    4. 최소 평균값 탐색.

    입니다. 답변 부탁드립니다.!


    ~~~ c++
    #include

    int main()
    {
    int C;
    scanf("%d", &C);
    for(int i=0; i<C; i++){
    int day, team;
    double *pay, *avg;
    scanf("%d%d", &day,&team);
    pay = new double[day];
    avg = new double[day-team+1];

        for(int j=0; j<day; j++){// 금액 입력
            scanf("%lf", &pay[j]);
        }
    
        for(int x=0; x<day-team+1; x++){ // 각각 위치서부터 평균 계산
            avg[x] = 0.0;
            for(int y=0; y<team; y++){
                avg[x]+=pay[x+y];
            }
            double tmp = team;
            int l = x-1;
            //왼쪽 숫자가 있고, 더한 평균이 더 작을 때, 왼쪽 더해주기
            while(l>=0 && (avg[x]+pay[l])/(tmp+1) < avg[x]/tmp){
                avg[x]+=pay[l];
                tmp++;
                l--;
            }
            //오른쪽 숫자가 있고, 더한 평균이 더 작을 때, 오른쪽 더해주기
            int r = x+team;
            while(r<day && (avg[x]+pay[r])/(tmp+1) < avg[x]/tmp){
                avg[x]+=pay[r];
                tmp++;
                r++;
            }
            // 평균값 저장
            avg[x]/=tmp;
        }
    
        double min = avg[0];
        for(int j=0; j<day-team+1; j++){
            if(avg[j] < min){
                min = avg[j];
            }
        }
        printf("%.10lf\n", min);
        delete[] pay;
        delete[] avg;
    }
    
    return 0;
    

    }
    ~~~


    12년 전
2개의 댓글이 있습니다.
  • User Avatar
    VOCList

    1
    11 6
    1 1 5 4 3 10 3 4 5 1 1

    정답은 모두 선택하는거에용.


    12년 전 link
  • User Avatar
    rlagptnr67

    답변감사드려요! 다시해볼께요!


    12년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.