#18643: python mmap 寫法


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.74.225]
最後登入時間 :
2024-04-18 19:26:56
e307. 請讓我留在你的回憶裡 -- π | From: [140.112.16.180] | 發表日期 : 2019-07-27 11:08

import mmap
from sys import stdout
from sys import stdin
import contextlib
with contextlib.closing(mmap.mmap(stdin.fileno(),98915248,access=mmap.ACCESS_READ)) as mm:
 s=str(mm.readline()).replace('\x00','')
 s=s.replace('  ','')
 stdout.write(s[2:len(s)-1])
mm.close()

怎麼改?
為什麼不是TLE就是WA,我還以為mmap很快...
 
#18646: Re:python mmap 寫法


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.74.225]
最後登入時間 :
2024-04-18 19:26:56
e307. 請讓我留在你的回憶裡 -- π | From: [140.112.16.180] | 發表日期 : 2019-07-27 12:12

import mmap
from sys import stdout
from sys import stdin
import contextlib
with contextlib.closing(mmap.mmap(stdin.fileno(),98915248,access=mmap.ACCESS_READ)) as mm:
 s=str(mm.readline()).replace('\x00','')
 s=s.replace('  ','')
 stdout.write(s[2:len(s)-1])
mm.close()

怎麼改?
為什麼不是TLE就是WA,我還以為mmap很快...

 

原來要用decode()啊~

 
#18647: Re:python mmap 寫法


icube (!@#$%^&*()_+)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 61090
來源 : [220.135.116.184]
最後登入時間 :
2024-04-01 14:01:32
e307. 請讓我留在你的回憶裡 -- π | From: [220.135.116.184] | 發表日期 : 2019-07-27 12:15

import mmap
from sys import stdout
from sys import stdin
import contextlib
with contextlib.closing(mmap.mmap(stdin.fileno(),98915248,access=mmap.ACCESS_READ)) as mm:
 s=str(mm.readline()).replace('\x00','')
 s=s.replace('  ','')
 stdout.write(s[2:len(s)-1])
mm.close()

怎麼改?
為什麼不是TLE就是WA,我還以為mmap很快...
最後的 mm.close() 可以刪掉,因為 contextlib.closing 會處理。
另外就是用 decode 會比 str 來得自然,似乎也比較快。



 
#18648: Re:python mmap 寫法


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.74.225]
最後登入時間 :
2024-04-18 19:26:56
e307. 請讓我留在你的回憶裡 -- π | From: [192.192.13.101] | 發表日期 : 2019-07-27 13:14

import mmap
from sys import stdout
from sys import stdin
import contextlib
with contextlib.closing(mmap.mmap(stdin.fileno(),98915248,access=mmap.ACCESS_READ)) as mm:
 s=str(mm.readline()).replace('\x00','')
 s=s.replace('  ','')
 stdout.write(s[2:len(s)-1])
mm.close()

怎麼改?
為什麼不是TLE就是WA,我還以為mmap很快...
最後的 mm.close() 可以刪掉,因為 contextlib.closing 會處理。
另外就是用 decode 會比 str 來得自然,似乎也比較快。



謝謝~


 
ZeroJudge Forum