#45696: 求助:出現了不是TLE的問題


yp11251018 (807-37傅冠勝)

學校 : 臺北市私立延平高級中學
編號 : 239313
來源 : [36.229.119.124]
最後登入時間 :
2025-02-28 18:21:46
q001. "421"循環 | From: [36.229.95.239] | 發表日期 : 2025-03-30 19:01

#include <bits/stdc++.h>

using namespace std;
long long arr[6608375];
long long f(long long n)
{
    if(n==4){
        return arr[4];
    }
    if(arr[n]==0){
        arr[n] = (n&1?f(3*n+1) : f(n/2));
        return arr[n]+1;
    }
    else{
        return arr[n]+1;
    }
}
int main()
{
    long long a;
    arr[4]=0;
    while(scanf("%lld",&a)!=EOF)
    {
        printf("%lld\n",f(a));
    }
    return 0;
}

因為沒有測資範圍,所以我把表(arr)開到盡量最大。

並使用遞迴(f())來建表(arr),但

而當我把表作小一點時

#include <bits/stdc++.h>

using namespace std;
long long arr[1000000];
long long f(long long n)
{
    if(n==4){
        return arr[4];
    }
    if(arr[n]==0){
        arr[n] = (n&1?f(3*n+1) : f(n/2));
        return arr[n]+1;
    }
    else{
        return arr[n]+1;
    }
}
int main()
{
    long long a;
    arr[4]=0;
    while(scanf("%lld",&a)!=EOF)
    {
        printf("%lld\n",f(a));
    }
    return 0;
}

 

出現了另一種錯誤:

 

希望有人能告訴我出錯的地方以及資料範圍

註:以上程式碼在測試執行都沒問題

 
#45697: Re: 求助:出現了不是TLE的問題


yp11251018 (807-37傅冠勝)

學校 : 臺北市私立延平高級中學
編號 : 239313
來源 : [36.229.119.124]
最後登入時間 :
2025-02-28 18:21:46
q001. "421"循環 | From: [36.229.95.239] | 發表日期 : 2025-03-30 19:12

就算把long long 改成int也沒辦法

 
#45701: Re: 求助:出現了不是TLE的問題


henry.rem.rem@gmail.com (*ฅ́˘ฅ̀*)

學校 : 臺北市立松山高級中學
編號 : 278368
來源 : [223.137.90.164]
最後登入時間 :
2025-01-31 20:11:05
q001. "421"循環 | From: [1.161.48.231] | 發表日期 : 2025-03-31 22:48

這題記憶體只給16MB

你用的 #include <bits/stdc++.h> 會爆炸

請改成 #include <stdio.h>

I/O用這個標頭檔內的 scanf()、printf()

以上OuOb

 
ZeroJudge Forum