runnig

[codejam] lawnmower

Apr 13th, 2013
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.92 KB | None | 0 0
  1. import sys
  2.  
  3. class Field:
  4.     def __init__(self, R, C):
  5.         mat = []
  6.         for r in range(R):
  7.             mat.append( [0] * C)
  8.         self.mat = mat
  9.         self.R = R
  10.         self.C = C
  11.        
  12.     def cell(self, r, c):
  13.         if r < 0 or r >= self.R or c < 0 or c >= self.C:
  14.             return 0
  15.         return self.mat[r][c]
  16.    
  17.     def __str__(self):
  18.         return str(self.mat)
  19.     def __repr__(self):
  20.         return self.mat.__repr__()
  21.    
  22. def solve(fp):
  23.     L = fp.readline().split()
  24.     N, M = int(L[0]), int(L[1])
  25.     field = Field(N, M)
  26.    
  27.     maxSoFar = []
  28.     for i in range(4):
  29.         maxSoFar.append(Field(N, M))
  30.    
  31.     for r in range(N):
  32.         L = fp.readline().split()
  33.         for c in range(M):
  34.             v = int(L[c])
  35.             field.mat[r][c] = v
  36.             maxSoFar[LEFT].mat[r][c] = max(v, maxSoFar[LEFT].cell(r, c-1))
  37.             maxSoFar[TOP].mat[r][c] = max(v, maxSoFar[TOP].cell(r-1, c))
  38.                
  39.     for r in range(N):
  40.         for c in range(M):
  41.            
  42.             c1 = M - 1 - c
  43.             v = field.mat[r][c1]
  44.             maxSoFar[RIGHT].mat[r][c1] = max(v, maxSoFar[RIGHT].cell(r, c1 + 1))
  45.                
  46.             r1 = N - 1 - r
  47.             v = field.mat[r1][c]
  48.             maxSoFar[BOTTOM].mat[r1][c] = max(v, maxSoFar[BOTTOM].cell(r1+1, c))
  49.                
  50.     for r in range(N):
  51.         for c in range(M):
  52.            
  53.             higher = 0
  54.             v = field.mat[r][c]
  55.             for i in range(4):
  56.                 if maxSoFar[i].mat[r][c] > v:
  57.                     higher += 1
  58.             if higher == 4:
  59.                 #return "NO %d,%d" % (r,c)
  60.                 return "NO"
  61.     return "YES"
  62.            
  63.    
  64. fp = open(sys.argv[1])
  65. T = int(fp.readline())
  66.  
  67. LEFT, TOP, RIGHT, BOTTOM = 0, 1, 2, 3
  68.  
  69.  
  70.  
  71. for testcase in range(1, T+1):
  72.     ans =  solve(fp)
  73.     print "Case #%d: %s" % (testcase, ans)
Advertisement
Add Comment
Please, Sign In to add comment