#38486: TLE解法


yupingw95@gmail.com (王裕萍)

學校 : 不指定學校
編號 : 256789
來源 : [140.113.136.221]
最後登入時間 :
2024-01-04 21:29:36
b936. Kevin 愛橘子 -- 有一天Kevin走在路上 | From: [140.113.136.221] | 發表日期 : 2023-11-29 15:13

最後一筆測資一直TLE,想請問程式碼可以改進的地方,目前還沒想到非遞迴的寫法,如果有想法的人也歡迎給我一點提示><

當中我也有試過把n<m直接寫在main function判斷來減少進入getSum這個函數的次數,還有使用位元移動來做n/2的除法等等,結果還是沒過QQ

#include <stdio.h>
#include <math.h>

long long getSum(long long n, long long m){
if (n<m)
return 0;
else if (n>=m && n<m*2)
return 1;
else if (n>=m*2 && n%2==0){
return getSum(n/2, m)*2;
}
else if (n>=m*2 && n%2==1){
return getSum((n-1)/2, m) + getSum((n+1)/2, m);
}
return -1;
}

int main(){
long long n, m;
while (scanf("%lld %lld", &n, &m) != EOF){
printf("%lld\n", getSum(n, m));
}
}
 
 
ZeroJudge Forum