Python 板


LINE

最近做 onlinejudge 時遇到一個狀況, 題目會給出一個超長字串(皆為數字中間以空白分隔) ex.10 200 3 6000 40545 87242 ... (長度約10^7個數字) 之前的處理方法都是先做切割(以空白分隔)再轉成數字 list1 = input().split(' ') list2 = [int(x) for x in list1] 但這題因為字串太長,在第一步驟時就產生 MemoryError的訊息 可是我又得判斷出字串中所有數字(任取三個) "是否有機會形成一個三角形的邊長" 像這樣的狀況 各位前輩們有什麼較好的策略嗎? 感謝!! (新手自學中 問題若太嫩還請包涵...) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.241.113
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1505516658.A.14E.html
1F:→ Aerials: try 64-bit python? or use chunking or sqlite 09/16 08:57
2F:推 Django: 每個數字的範圍有上限嗎? 09/16 11:44
3F:→ Django: 當數字多的時候 如果要任取三個數都無法形成三角形的話 09/16 11:44
4F:→ Django: 代表第3小的數至少是第1小的2倍 第5又至少是第3小的2倍 09/16 11:45
5F:→ Django: 所以如果有n個數任取三個都無法形成三角形 代表最大的數 09/16 11:45
6F:→ Django: 至少是最小的2^((n-1)/2)倍 09/16 11:46
7F:→ Django: 所以字串內含的數如果是int大小的話 n=70就已經肯定可以吧 09/16 11:47
8F:→ Django: 64bit也n=130左右就肯定可以了 09/16 11:47
9F:→ Django: n=10^7如果還不行的話 裡面不知是啥天文數字XD 09/16 11:48
10F:→ Django: 所以應該可以根據input限制 短於某個長度才來判別 09/16 11:48
11F:→ Django: 太長的就直接輸出可以 09/16 11:48
挖 居然是是Django本人!(學習ing) 抱歉回晚了 每個數字範圍 1~10^9, 然後數字可以重複,字串未做排序 D大的方式是不是只適用於數字沒有重複呢? 附上題目連結 https://zerojudge.tw/ShowProblem?problemid=c268 後來想到好像可以使用 for 迴圈 + string = sys.stdin.read(size) 存取片段字串 只是卡在那個size不知道要多大...(不知道每個數字位數,每次斷點不同 orz) ※ 編輯: ddchris (118.166.241.113), 09/16/2017 17:01:44
12F:→ uranusjr: 可以一次讀一個再出來自己組, 讀到不是數字就代表要斷 09/16 22:15
13F:→ uranusjr: 問題應該不是單一數字的大小, 是有很多個數字 09/16 22:15
14F:推 Django: 有重複還是一樣可以那樣bound吧 09/17 00:47
15F:→ Django: n超過100在那個範圍內就不可能找不出三條湊三角形了 09/17 00:49
16F:推 Django: 你也不用真的去排序 排序只是證明必存在3條湊三角形而已 09/17 00:50
17F:推 Django: 100*10也頂多1000位 所以例如不到1000位就全讀進來硬爆 09/17 00:52
18F:→ Django: 超過就直接輸出可以' 09/17 00:53
19F:→ uranusjr: 他的問題就是只會整行讀不知道怎麼只讀幾個數字啊 XD 09/17 00:55
20F:推 Django: 所以他是input()爆掉不是split()爆哦 09/17 00:59
21F:→ uranusjr: 看起來他只讀部分行或讀進來只拆部分項兩個都不會啊 XD 09/17 01:05
22F:→ uranusjr: 我的意思是他的問題不是演算法, 而是在 Python 的使用 09/17 01:06
23F:推 Django: 嗯應該是 09/17 01:08
感謝樓上兩位 其實我兩方面都不是很清楚 後來有問別人提供了解法: 任選3不能成為三角形的組合會是 1 1 2 3 5 8...(費氏數列?) 所以當 f(44)時超過10^9,故超過44組以上皆可排成三角形(應該是這樣沒錯?) if n > 44: s = 'x' (為了讓迴圈可以跑設的任意字串?) while s[-1] != '\n': ( readline 當讀到檔案末端送出\n來結束迴圈?) s = sys.stdin.readline(500000) (在記憶體限制內讀取適當大小?) print('YES') 有錯還請告知 ^^"
24F:推 CaTom: (偷偷筆記) 最近改用python解zerojudge也對整行讀取再切空 09/17 09:21
25F:→ CaTom: 格這點很苦惱(上週才問過類似問題)但相對的大數運算排列求 09/17 09:22
※ 編輯: ddchris (118.166.241.113), 09/17/2017 09:23:04
26F:→ CaTom: 冪那些全都可以輕鬆秒殺XD 09/17 09:22
27F:推 oToToT: 個人覺得python不適合做演算法題 09/18 16:30
28F:→ s860134: 樓上怎麼說@@ 09/19 03:59
29F:推 CaTom: 應該是python運行速度的問題硬傷吧? 像for相比C++慢了兩個 09/19 08:41
30F:→ CaTom: 數量級 偏偏演算法題為了考演算法都是用大量測資要短時間內 09/19 08:42
31F:→ CaTom: 完成 其他語言可能用稍好的演算法就能達成的py要苦思更精 09/19 08:43
32F:→ CaTom: 簡快速的方式.. 09/19 08:43







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP