#24068: RE了 救命


s0975247623@gmail.com (愛吃又愛睡的Weber)

學校 : 高雄市立高雄高級中學
編號 : 136210
來源 : [42.77.23.117]
最後登入時間 :
2023-01-17 20:53:17
f607. 3. 切割費用 -- 2021年1月APCS | From: [42.75.153.101] | 發表日期 : 2021-01-15 18:34

#include<iostream>

using namespace std;

int main()

{

    ios::sync_with_stdio(false);

    cin.tie(0);

    int n,l;

    cin>>n>>l;

    int x[n]={},len[l]={};

    long long sum=0;

    for(int i=0;i<n;i++)

    {

        int a,b;

        cin>>a>>b;

        x[b-1]=a;

    }

    for(int i=0;i<n;i++)

    {

        int j=x[i],k=x[i];

        len[j]++;

        while(len[k+1]==0&&k<l-1){

            k++;

        } 

        sum+=(k+1);

        while(len[j-1]==0&&j>1){

            j--;

        }

        sum-=(j-1);

    }

    cout<<sum;

}

求大神幫

 
#24073: Re:RE了 救命


s0975247623@gmail.com (愛吃又愛睡的Weber)

學校 : 高雄市立高雄高級中學
編號 : 136210
來源 : [42.77.23.117]
最後登入時間 :
2023-01-17 20:53:17
f607. 3. 切割費用 -- 2021年1月APCS | From: [223.138.89.218] | 發表日期 : 2021-01-16 13:07

#include<iostream>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,l;
    cin>>n>>l;
    int x[n]={};
    bool cut[l]={false};
    long long sum=0;
    for(int i=0;i<n;i++)
    {
        int a,b;
        cin>>a>>b;
        x[b-1]=a;
    }
    for(int i=0;i<n;i++)
    {
        int j=x[i],k=x[i];
        while(cut[k]==false && k<l){
            k++;
        }
        sum+=k;
        while(cut[j]==false && j>0){
            j--;
        }
        sum-=j;
        cut[x[i]]=true;
    }
    cout<<sum;
}

比較好懂一點的版本 但還是RE

 
#24074: Re:RE了 救命


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [122.117.95.179]
最後登入時間 :
2024-11-04 20:21:51
f607. 3. 切割費用 -- 2021年1月APCS | From: [61.223.61.226] | 發表日期 : 2021-01-16 13:35

如果是 50% 可能是方向對,方法不好。

一直是 0% 可能連方向都不對。

 

不妨用中文表達一下想法是什麼,為何這樣寫,

大家才好幫你。

 
#24080: Re:RE了 救命


s0975247623@gmail.com (愛吃又愛睡的Weber)

學校 : 高雄市立高雄高級中學
編號 : 136210
來源 : [42.77.23.117]
最後登入時間 :
2023-01-17 20:53:17
f607. 3. 切割費用 -- 2021年1月APCS | From: [223.138.89.218] | 發表日期 : 2021-01-16 17:07

如果是 50% 可能是方向對,方法不好。

一直是 0% 可能連方向都不對。

 

不妨用中文表達一下想法是什麼,為何這樣寫,

大家才好幫你。


上面的for迴圈純屬輸入

下面兩個while分別是往上跟往下找裁切點

找不到代表尚未裁切過,取原竿子的端點

基本上就是以兩端點的距離差來算切割的長度

而端點可能是之前的裁切點或原本竿子的端點

cut陣列是來存取哪點曾切割過

P. S. Zerojudge判斷是RE(記憶體段位錯誤之類的)

 
#24081: Re:RE了 救命


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [122.117.95.179]
最後登入時間 :
2024-11-04 20:21:51
f607. 3. 切割費用 -- 2021年1月APCS | From: [61.223.61.226] | 發表日期 : 2021-01-16 17:22

你的  bool cut[l]={false};
 
題敘  1 ≤ L ≤ 10^7
 
表示你開了一個 10^7 的陣列。
即使系統允許你開這麼大的陣列。
你在這麼大的陣列裡找數值,效率也不好吧。

 

 
#24083: Re:RE了 救命


s0975247623@gmail.com (愛吃又愛睡的Weber)

學校 : 高雄市立高雄高級中學
編號 : 136210
來源 : [42.77.23.117]
最後登入時間 :
2023-01-17 20:53:17
f607. 3. 切割費用 -- 2021年1月APCS | From: [223.138.89.218] | 發表日期 : 2021-01-16 18:13

你的  bool cut[l]={false};
 
題敘  1 ≤ L ≤ 10^7
 
表示你開了一個 10^7 的陣列。
即使系統允許你開這麼大的陣列。
你在這麼大的陣列裡找數值,效率也不好吧。

 

了解~

那假如真的在考APCS會讓我執行嗎(小弟一次都還沒考過)

 
#24084: Re:RE了 救命


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [122.117.95.179]
最後登入時間 :
2024-11-04 20:21:51
f607. 3. 切割費用 -- 2021年1月APCS | From: [61.223.61.226] | 發表日期 : 2021-01-16 18:52

L 太大,開陣列不太可行 (出題的人有想到了) 往前往後找也很浪費時間

建議看一下我的解題報告,

 
ZeroJudge Forum