Un jour où la solution naïve à la première partie ne passe pas à l'échelle pour la seconde partie.
J'ai d'abord fait une solution qui a explosé la RAM (4M*4M d'int, ça explose).
Puis une solution sans rien en RAM mais qui explose le CPU (j'ai timeout à 10 minutes).
Troisième solution qui est un compromis entre RAM et CPU. Je stocke des intervalles pour 4M de lignes ; comme les autres solutions présentées ici.
Ça passe, en 40 secondes avec l'aide du JIT.
code partie 2
importsysW=H=4_000_000# store position that are not reachable, row by rowL=[[(0,0)for_inrange(32)]for_inrange(H+1)]fori,linenumerate(sys.stdin.read().splitlines()):(_,_,X,Y,_,_,_,_,A,J)=l.split(" ")x,y=int(X[2:-1]),int(Y[2:-1])a,b=int(A[2:-1]),int(J[2:])d=abs(x-a)+abs(y-b)fornyinrange(y-d,y+d+1):ifny>=0andny<=H:dy=abs(ny-y)dx=d-dyL[ny][i]=(x-dx,x+dx)for(y,I)inenumerate(L):SI=sorted(I)maxx=0for(a,b)inSI:ifa>maxx+1:print(y,maxx+1,(maxx+1)*4_000_000+y)sys.exit(0)maxx=max(maxx,b)
# python, on a RAMé
Posté par steph1978 . En réponse au message Avent du Code jour 15. Évalué à 2.
Un jour où la solution naïve à la première partie ne passe pas à l'échelle pour la seconde partie.
J'ai d'abord fait une solution qui a explosé la RAM (4M*4M d'int, ça explose).
Puis une solution sans rien en RAM mais qui explose le CPU (j'ai timeout à 10 minutes).
Troisième solution qui est un compromis entre RAM et CPU. Je stocke des intervalles pour 4M de lignes ; comme les autres solutions présentées ici.
Ça passe, en 40 secondes avec l'aide du JIT.
code partie 2