n00m wrote: > http://www.spoj.pl/problems/SUMFOUR/ > > 3 > 0 0 0 0 > 0 0 0 0 > -1 -1 1 1 > Answer for this input data is 33. > > My solution for the problem is > ====================================================================== > > import time > t = time.clock() > > q,w,e,r,sch,h = [],[],[],[],0,{} > > f = open("D:/m4000.txt","rt") > > n = int(f.readline()) > > for o in range(n): > row = map(long, f.readline().split()) > q.append(row[0]) > w.append(row[1]) > e.append(row[2]) > r.append(row[3]) > > f.close() > > for x in q: > for y in w: > if h.has_key(x+y): > h[x+y] += 1 > else: > h[x+y] = 1
This won't help much, but you can rewrite the above as:: x_y = x + y h[x_y] = h.get(x_y, 1) Or if you're using Python 2.5, try:: h = collections.defaultdict(itertools.repeat(0).next) ... for x in q: for y in w: h[x + y] += 1 ... Not likely to get you an order of magnitude though. > for x in e: > for y in r: > sch += h.get(-(x+y),0) If you use the collections.defaultdict approach above, this becomes:: for x in e: for y in r: sch += h[-(x + y)] Note that you should also probably put all your code into a function -- looking up function locals is quicker than looking up module globals. STeVe -- http://mail.python.org/mailman/listinfo/python-list