FESTIVAL 문제 질문드립니다!

  • sclee1
    sclee1

    FESTIVAL 문제를 풀고있는데요..

    왜 런타임에러(메모리fault)가 나는지 모르겠어요..

    분명히 테스트 케이스 잘 동작되고 왠만한거 다 넣어봤는데 잘 동작하는데, 왜 그런지 모르겠어요

    소스는 아래와 같습니다.

    /**
    * BRACKETS2
    *
    * @author Seungchul Lee
    * @solved 2016. 10. 03
    *
    * http://algospot.com/judge/problem/read/FESTIVAL
    */
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <string>
    #include <vector>
    #include <list>
    #include <stack>
    using namespace std;
    
    #define INF 987654321
    
    namespace FESTIVAL {
    
        int N;
        int L;
        vector<double> costs;
    
        vector<double> movingAverage2(const vector<double>&A, int L) {
            int N = A.size();
            vector<double> ret;
            double partialSum = 0;
            if (L == N) {
                for (int i = 0; i < L; ++i) {
                    partialSum += A[i];
                }
                ret.push_back(partialSum / N);
                return ret;
            }
    
            for (L; L < N ; ++L) {
                for (int i = 0; i < L - 1; ++i) {
                    partialSum += A[i];
                }
                for (int i = L - 1; i < N; ++i) {
                    partialSum += A[i];
                    ret.push_back(partialSum / L);
                    partialSum -= A[i - L + 1];
                }
                partialSum = 0;
            }
    
    
            return ret;
        }
    
        int do_main(int argc, const char *argv[]) {
            freopen("input.txt", "r", stdin);
            int TC;
            int cnt = 0;
    
            cin >> TC;
    
            while (TC--) {
                cin >> N;
                cin >> L;
    
                for (int i = 0; i < N; ++i) {
                    double num = 0;
                    cin >> num;
                    costs.push_back(num);
                }
    
                vector<double> ans = movingAverage2(costs, L);
                double minVal = 987654321;
                while (!ans.empty()) {
                    minVal = min(minVal, ans.back());
                    ans.pop_back();
                }
    
                printf("%.12f\n", minVal);
                ans.clear();
            }
    
            return 0;
        }
    }
    
    #ifndef DRIVER
    
    int main(int argc, const char *argv[]) {
        return FESTIVAL::do_main(argc, argv);
    }
    
    #endif
    

    8년 전
3개의 댓글이 있습니다.
  • JongMan
    JongMan

    이미 정답 받으신 듯하지만 costs 벡터를 초기화 안 하고 계시네요. 왜 이 때문에 런타임 에러가 나는지는 모르겠습니다...


    8년 전 link
  • JongMan
    JongMan

    메모리 초과인가 봅니다.


    8년 전 link
  • sclee1
    sclee1

    @JongMan 답변 감사드립니다!!


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