#30087: C++記憶體區段錯誤?


e002933 (徐MAN)

學校 : 不指定學校
編號 : 158405
來源 : [111.71.113.217]
最後登入時間 :
2023-11-18 16:56:51
f855. 第 3 題 線段覆蓋長度 測資加強版 -- APCS大學程式設計先修檢測(2016/03/05) | From: [118.150.201.99] | 發表日期 : 2022-04-27 17:52

想請問一下以下我寫的程式碼,哪裡有問題

有過b966,

但跑這題,在資測0,1,4三個點卻顯示"記憶體區段錯誤

結果只有40分

請不吝賜教

#include<iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    int l[n], r[n];
    int max = 0;
    for(int i = 0; i < n; i++) {
        cin>>l[i];
        cin>>r[i];
        if(max < r[i])
            max = r[i];
    }
    bool b[max] = {0};
    for(int i = 0; i < n; i++) {
        for(int j = l[i]; j < r[i]; j++)
            b[j] = 1;
    }
    int num = 0;
    for(int i = 0; i < max; i++)
        if(b[i] == 1)
            num++;
    cout<<num;
    return 0;
}

 
#30088: Re: C++記憶體區段錯誤?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
f855. 第 3 題 線段覆蓋長度 測資加強版 -- APCS大學程式設計先修檢測(2016/03/05) | From: [27.246.161.196] | 發表日期 : 2022-04-27 18:10


    bool b[max] = {0};


max最大可能是9999999,你的陣列太大了,會overflow。就算改成動態記憶體或是用vector也會TLE,改用好一點的方法吧

 
#30092: Re: C++記憶體區段錯誤?


ccpclub (ccpclub)

學校 : 不指定學校
編號 : 181202
來源 : [1.34.88.173]
最後登入時間 :
2024-01-26 23:21:57
f855. 第 3 題 線段覆蓋長度 測資加強版 -- APCS大學程式設計先修檢測(2016/03/05) | From: [1.34.88.173] | 發表日期 : 2022-04-28 11:08


    bool b[max] = {0};


max最大可能是9999999,你的陣列太大了,會overflow。就算改成動態記憶體或是用vector也會TLE,改用好一點的方法吧


只能說b966的側資太弱了,沒卡到worst case

 
#30922: Re: C++記憶體區段錯誤?


fire5386 (becaidorz)

學校 : 國立清華大學
編號 : 115822
來源 : [140.114.217.8]
最後登入時間 :
2024-04-13 22:06:23
f855. 第 3 題 線段覆蓋長度 測資加強版 -- APCS大學程式設計先修檢測(2016/03/05) | From: [114.25.95.111] | 發表日期 : 2022-06-22 11:26

 


只能說b966的側資太弱了,沒卡到worst case


r1ckyorz

 
ZeroJudge Forum