#17187: 好難啊


evan85910907 (~Ice Tea~)

學校 : 嘉義市私立嘉華高級中學
編號 : 54046
來源 : [140.113.136.220]
最後登入時間 :
2021-03-07 10:18:01
c643. 55555 -- 經典問題 | From: [163.27.13.177] | 發表日期 : 2019-03-24 10:48

這題我已經成功算出n=55555的答案了,但是太長沒辦法上傳。有沒有辦法可以縮短程式碼長度,或者不用離線算的想法呢?

 
#17188: Re:好難啊


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.74.225]
最後登入時間 :
2024-04-18 19:26:56
c643. 55555 -- 經典問題 | From: [42.72.160.79] | 發表日期 : 2019-03-24 11:30

這題我已經成功算出n=55555的答案了,但是太長沒辦法上傳。有沒有辦法可以縮短程式碼長度,或者不用離線算的想法呢?

看起來這題就算建n=1~55555的答案表,也很可能TLE,考驗大數的效率啊~
思考中...

 
#17189: Re:好難啊


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.74.225]
最後登入時間 :
2024-04-18 19:26:56
c643. 55555 -- 經典問題 | From: [42.72.160.79] | 發表日期 : 2019-03-24 11:31

這題我已經成功算出n=55555的答案了,但是太長沒辦法上傳。有沒有辦法可以縮短程式碼長度,或者不用離線算的想法呢?

看起來這題就算建n=1~55555的答案表,也很可能TLE,考驗大數的效率啊~
思考中...

應該存在某種數學解吧...


 
#17191: Re:好難啊


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [1.168.27.172]
最後登入時間 :
2024-04-24 20:07:19
c643. 55555 -- 經典問題 | From: [1.168.30.189] | 發表日期 : 2019-03-24 14:24

這題我已經成功算出n=55555的答案了,但是太長沒辦法上傳。有沒有辦法可以縮短程式碼長度,或者不用離線算的想法呢?

看起來這題就算建n=1~55555的答案表,也很可能TLE,考驗大數的效率啊~
思考中...

應該存在某種數學解吧...



如果要建表 只要建  n = 55555

n = 1 就最後 1 個字

n = 2 就最後 2 個字
... 

https://oeis.org/A151752 這裡有

 
#17192: Re:好難啊


evan85910907 (~Ice Tea~)

學校 : 嘉義市私立嘉華高級中學
編號 : 54046
來源 : [140.113.136.220]
最後登入時間 :
2021-03-07 10:18:01
c643. 55555 -- 經典問題 | From: [163.27.13.177] | 發表日期 : 2019-03-24 15:34

這題我已經成功算出n=55555的答案了,但是太長沒辦法上傳。有沒有辦法可以縮短程式碼長度,或者不用離線算的想法呢?

看起來這題就算建n=1~55555的答案表,也很可能TLE,考驗大數的效率啊~
思考中...

應該存在某種數學解吧...



如果要建表 只要建  n = 55555

n = 1 就最後 1 個字

n = 2 就最後 2 個字
... 

https://oeis.org/A151752 這裡有

即使如此,要求出 n = 55555的答案,也是要從 n =1、n =2......n=55554、n=55555這樣求,這樣的話就要做55555次的大數運算,而大數的位數最多可到55555,這樣子應該還是會TLE。如果直接把n=55555的答案貼上去,程式碼會過長,也不是辦法。

 
#17193: Re:好難啊


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [1.168.27.172]
最後登入時間 :
2024-04-24 20:07:19
c643. 55555 -- 經典問題 | From: [1.168.30.189] | 發表日期 : 2019-03-24 15:37

這題我已經成功算出n=55555的答案了,但是太長沒辦法上傳。有沒有辦法可以縮短程式碼長度,或者不用離線算的想法呢?

看起來這題就算建n=1~55555的答案表,也很可能TLE,考驗大數的效率啊~
思考中...

應該存在某種數學解吧...



如果要建表 只要建  n = 55555

n = 1 就最後 1 個字

n = 2 就最後 2 個字
... 

https://oeis.org/A151752 這裡有

即使如此,要求出 n = 55555的答案,也是要從 n =1、n =2......n=55554、n=55555這樣求,這樣的話就要做55555次的大數運算,而大數的位數最多可到55555,這樣子應該還是會TLE。如果直接把n=55555的答案貼上去,程式碼會過長,也不是辦法。


程式碼可以有 10 MB

 
#17194: Re:好難啊


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [1.168.27.172]
最後登入時間 :
2024-04-24 20:07:19
c643. 55555 -- 經典問題 | From: [1.168.30.189] | 發表日期 : 2019-03-24 15:43

這題我已經成功算出n=55555的答案了,但是太長沒辦法上傳。有沒有辦法可以縮短程式碼長度,或者不用離線算的想法呢?

看起來這題就算建n=1~55555的答案表,也很可能TLE,考驗大數的效率啊~
思考中...

應該存在某種數學解吧...



如果要建表 只要建  n = 55555

n = 1 就最後 1 個字

n = 2 就最後 2 個字
... 

https://oeis.org/A151752 這裡有

即使如此,要求出 n = 55555的答案,也是要從 n =1、n =2......n=55554、n=55555這樣求,這樣的話就要做55555次的大數運算,而大數的位數最多可到55555,這樣子應該還是會TLE。如果直接把n=55555的答案貼上去,程式碼會過長,也不是辦法。


程式碼可以有 10 MB


記錯了  抱歉

 

 
#17195: Re:好難啊


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [1.168.27.172]
最後登入時間 :
2024-04-24 20:07:19
c643. 55555 -- 經典問題 | From: [1.168.30.189] | 發表日期 : 2019-03-24 16:26

 

code 的長度限制是 10 k

n = 55555 長度是 54.2k

如果你能寫個  N 進位的 function

也是可以濃縮的。

顯然作弊比正規的解法還難。哈~~

 
#17199: Re:好難啊


xavier13540 (柊 四千)

學校 : 國立臺灣大學
編號 : 21783
來源 : [1.171.44.145]
最後登入時間 :
2024-04-25 01:48:22
c643. 55555 -- 經典問題 | From: [111.240.170.148] | 發表日期 : 2019-03-25 00:44

 

code 的長度限制是 10 k

n = 55555 長度是 54.2k

如果你能寫個  N 進位的 function

也是可以濃縮的。

 

顯然作弊比正規的解法還難。哈~~

 

這邊提供官方(?)解法。
這題的時間複雜度是 $\color{black}{O(n^2)}$,
但是 $\color{black}{n}$ 最大到 $\color{black}{55555}$,又有 $\color{black}{T\leq 555}$ 筆測資,
慘的是 $\color{black}{Tn^2>10^{12}}$,看起來怎麼樣都沒辦法在一秒內跑完對吧。

但其實不難發現對於每個 $\color{black}{n}$,這樣的 $\color{black}{n}$ 位數存在且唯一,
而且 $\color{black}{n=k}$ 的答案是 $\color{black}{n=k-1}$ 的答案加上最高一位。
所以只要算出 $\color{black}{n=55555}$ 的答案,就順便算出 $\color{black}{n=1, 2, \ldots, 55554}$ 的答案了。
設 $\color{black}{n=k}$ 的答案是 $\color{black}{a_k}$,則我們需要維護 $\color{black}{2^k}$ 和 $\color{black}{a_k/5^k}$。
注意 $\color{black}{a_k/5^k \leq 10^k/5^k = 2^k}$,
如果採用 $\color{black}{10^{18}}$ 進位,只需要 $930$ 個 64-bit integer 就能放得下,
而 $\color{black}{930\times 55555 < 10^8}$,好棒棒。

最後回應原 po。
你的 code 每次輸出一位數,會慢並不會很意外。
你可以先把 $\color{black}{n=55555}$ 的答案用字串存起來,
每次詢問時直接輸出這個字串的 $\color{black}{n}$-suffix。

 

 
#17252: Re:好難啊


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.74.225]
最後登入時間 :
2024-04-18 19:26:56
c643. 55555 -- 經典問題 | From: [42.72.160.79] | 發表日期 : 2019-03-31 11:23

 

code 的長度限制是 10 k

n = 55555 長度是 54.2k

如果你能寫個  N 進位的 function

也是可以濃縮的。

 

顯然作弊比正規的解法還難。哈~~

 

這邊提供官方(?)解法。
這題的時間複雜度是 $\color{black}{O(n^2)}$,
但是 $\color{black}{n}$ 最大到 $\color{black}{55555}$,又有 $\color{black}{T\leq 555}$ 筆測資,
慘的是 $\color{black}{Tn^2>10^{12}}$,看起來怎麼樣都沒辦法在一秒內跑完對吧。

但其實不難發現對於每個 $\color{black}{n}$,這樣的 $\color{black}{n}$ 位數存在且唯一,
而且 $\color{black}{n=k}$ 的答案是 $\color{black}{n=k-1}$ 的答案加上最高一位。
所以只要算出 $\color{black}{n=55555}$ 的答案,就順便算出 $\color{black}{n=1, 2, \ldots, 55554}$ 的答案了。
設 $\color{black}{n=k}$ 的答案是 $\color{black}{a_k}$,則我們需要維護 $\color{black}{2^k}$ 和 $\color{black}{a_k/5^k}$。
注意 $\color{black}{a_k/5^k \leq 10^k/5^k = 2^k}$,
如果採用 $\color{black}{10^{18}}$ 進位,只需要 $930$ 個 64-bit integer 就能放得下,
而 $\color{black}{930\times 55555 < 10^8}$,好棒棒。

最後回應原 po。
你的 code 每次輸出一位數,會慢並不會很意外。
你可以先把 $\color{black}{n=55555}$ 的答案用字串存起來,
每次詢問時直接輸出這個字串的 $\color{black}{n}$-suffix。

 

b=[]

b.append(5)

for i in range(1,55555):

 c=0

 for j in range(len(b)):

  c+=b[j]*(10**j)

 for s in range(1,10,2):

  if(s*(10**i)+c)%(5**(i+1))==0:

   b.append(s)

   break

 

a=int(input())

for i in range(a):

 d=int(input())

 for j in range(d):

  print(j)

 

TLE了......



 
#17561: Re:好難啊


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.74.225]
最後登入時間 :
2024-04-18 19:26:56
c643. 55555 -- 經典問題 | From: [42.73.155.17] | 發表日期 : 2019-04-21 21:50

 

code 的長度限制是 10 k

n = 55555 長度是 54.2k

如果你能寫個  N 進位的 function

也是可以濃縮的。

 

顯然作弊比正規的解法還難。哈~~

 

這邊提供官方(?)解法。
這題的時間複雜度是 $\color{black}{O(n^2)}$,
但是 $\color{black}{n}$ 最大到 $\color{black}{55555}$,又有 $\color{black}{T\leq 555}$ 筆測資,
慘的是 $\color{black}{Tn^2>10^{12}}$,看起來怎麼樣都沒辦法在一秒內跑完對吧。

但其實不難發現對於每個 $\color{black}{n}$,這樣的 $\color{black}{n}$ 位數存在且唯一,
而且 $\color{black}{n=k}$ 的答案是 $\color{black}{n=k-1}$ 的答案加上最高一位。
所以只要算出 $\color{black}{n=55555}$ 的答案,就順便算出 $\color{black}{n=1, 2, \ldots, 55554}$ 的答案了。
設 $\color{black}{n=k}$ 的答案是 $\color{black}{a_k}$,則我們需要維護 $\color{black}{2^k}$ 和 $\color{black}{a_k/5^k}$。
注意 $\color{black}{a_k/5^k \leq 10^k/5^k = 2^k}$,
如果採用 $\color{black}{10^{18}}$ 進位,只需要 $930$ 個 64-bit integer 就能放得下,
而 $\color{black}{930\times 55555 < 10^8}$,好棒棒。

最後回應原 po。
你的 code 每次輸出一位數,會慢並不會很意外。
你可以先把 $\color{black}{n=55555}$ 的答案用字串存起來,
每次詢問時直接輸出這個字串的 $\color{black}{n}$-suffix。

 

b=[]

b.append(5)

for i in range(1,55555):

 c=0

 for j in range(len(b)):

  c+=b[j]*(10**j)

 for s in range(1,10,2):

  if(s*(10**i)+c)%(5**(i+1))==0:

   b.append(s)

   break

 

a=int(input())

for i in range(a):

 d=int(input())

 for j in range(d):

  print(j)

 

TLE了......



已AC


 
ZeroJudge Forum