Форум сайта python.su
а где?
во флейме, или прямо здесь?
создавай, я присоединюсь)
Офлайн
я тільки пропоную - то до модераторів. Просити певно треба alafin або slav0nic.
Офлайн
ты имеешь в виду не тему, а раздел?
спортивное программирование?
Офлайн
шось типу того
Офлайн
я отписался
Офлайн
crchemist
эта тема не на настолько актуальна, чтоб создавать раздел, создавайте отдельные темы по названию конкурсов например
да и на spoj есть раздел по питону, хотя там не принято постить ответы)
Офлайн
ок, будем постить в этой теме)
Офлайн
Я расстроен, я думал этот код будет очень быстрым:
import gc
gc.disable()
import sys
import psyco
psyco.full()
fin = sys.stdin.read
#from datetime import datetime#
#f = open("sumtrian.txt")#
#fin = f.read#
#fout = open("sumtrian.out", "w")#
#tmpout = sys.stdout#
#sys.stdout = fout#
def fmax(l):
result = None
for x in l:
result = x if x > result else result
return result
def main():
nums = {}
for x in range(100):
nums[str(x)] = x
data = fin().split()
dataLen = len(data)
for i in range(1,dataLen):
data[i] = nums[data[i]]
start = 2
while start < dataLen:
i = 0
rc = data[start-1]-1
while i < rc:
data[start+i+1] += data[start]
for j in range(start, start+i):
data[j+i+2] += data[j] if data[j] > data[j+1] else data[j+1]
start += i + 1
i = i + 1
data[start+i] += data[start-1]
print fmax(data[start: start+i+1])
start += i + 2
#t = datetime.now()#
main()
#sys.stdout = tmpout#
#print datetime.now() - t#
#fout.close()#
#f.close()#
Офлайн
вернулся к старому коду и оптимизировал его в соответствии со своими же замерами
в итоге 0.80 на следующем коде:
from collections import defaultdict
import sys
from cStringIO import StringIO
import gc; gc.disable()
import psyco
psyco.full()
fin = StringIO(sys.stdin.read())
fout = StringIO()
rinput = fin.readline
routput = fout.write
def fmax(l):
result = None
for x in l:
result = x if x > result else result
return result
def main():
nums = defaultdict(int)
for x in range(100):
nums[str(x)] = x
for caseNum in range(int(rinput())):
rowCount=nums[rinput().rstrip()]
lastLine = prevLine = [nums[rinput().rstrip()],]
for i in range(1, rowCount):
lastLine = rinput().split()
for i in range(len(lastLine)):
lastLine[i] = nums[lastLine[i]]
lastLine[0] += prevLine[0]
lastLine[-1] += prevLine[-1]
for j in range(1, i):
lastLine[j] += prevLine[j] if prevLine[j] > prevLine[j - 1] else prevLine[j - 1]
prevLine = lastLine
routput('%d\n' % fmax(lastLine))
fout.seek(0)
sys.stdout.write(fout.read())
main()
Офлайн
с заменой max было понятно, но это дало только 0.1
а вот самый интересный, хотя и логичный, прирост произошел с заменой
[nums[x] for x in rinput().split()]
lastLine = rinput().split()
for i in range(len(lastLine)):
lastLine[i] = nums[lastLine[i]]
Офлайн