Найти - Пользователи
Полная версия: Как еще можно оптимизировать следующий код?
Начало » Python для экспертов » Как еще можно оптимизировать следующий код?
1 2 3 4 5 6 7 8 9
izekia
crchemist
можна швидше.
Замість
fin = StringIO(sys.stdin.read())
rinput = fin.readline
і багатьох викликів rinput()

можна:

lines = sys.stdin.readlines()

for line in lines:
……..
да, я кстати думал об этом, но ты думаешь это быстрее работать будет чем, через StringIO?
crchemist
я дивився на цю задачку
http://www.spoj.pl/ranks/TEST/lang=PYTH
Zhang Yunqiao accepted 0.00 3.7M PYTH
izekia
не вышло с такой же скоростью?
там много удивительного есть)
кстати, время на одном и том же коде постоянно меняется
izekia
crchemist
я дивився на цю задачку
http://www.spoj.pl/ranks/TEST/lang=PYTH
Zhang Yunqiao accepted 0.00 3.7M PYTH
вот этот код выдал 0.2
import sys

while True:
x = sys.stdin.readline()
if x[:2] == '42': break
sys.stdout.write(x)
и такой:
import sys

while True:
x = sys.stdin.readline()
if x[:2] == '42': break
print x
crchemist
0.1
import sys
def main():
data = sys.stdin.read()
pos = data.rfind('42\n')
sys.stdout.write(data[:pos if pos != -1 else len(data)])
main()
izekia
интересно
а у меня такой код выдает 0.3
import sys
data = sys.stdin.read()
sys.stdout.write(data[:data.rfind('42\n')])
crchemist
izekia
да, я кстати думал об этом, но ты думаешь это быстрее работать будет чем, через StringIO?
та, але є проблема. треба зберігати в окремій змінній індекс в списку

lines = stdin.readlines()
line_index = 0

ncases = lines

line_index += 1 !!! - це повільно виконується
….

import psyco;
import sys
from cStringIO import StringIO
import os

fin = sys.stdin.readlines()
fout = StringIO()
routput = fout.write

def main():
cache = dict()
for x in range(100):
cache[str(x)] = x

q = 2
for i in range(int(fin[0])):
prev_line = [cache[fin[q].rstrip()]]
last_line = []
for j in range(1, int(fin[q - 1])):
q += 1
last_line = [cache[x] for x in fin[q].split()]
last_line[0] += prev_line[0]
for z in xrange(1, len(prev_line)):
plx = prev_line[z]
last_line[z] += prev_line[z - 1] <= plx and plx or prev_line[z - 1]

last_line[-1] += prev_line[len(prev_line) - 1]
prev_line = last_line

routput('%i\n'%_max(last_line) or prev_line[0])
q += 2
fout.seek(0)
os.write(1, fout.read())
psyco.bind(main)
def _max(l):
m = l[0]
for c in l:
m = c if m < c else m
return m

psyco.bind(_max)

main()
0.92
izekia
а ты по-русски вообще не умеешь?
просто я тебя плохо понимаю
shiza
OFF: переходите оба на английский ;)
izekia
shiza
тогда остальные ничего не поймут - тоже нехорошо ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB