Advertisement
MrHaas

Squished status

Jan 30th, 2012
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.71 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import sys
  3.  
  4. def time_function(func):    
  5.     def wrapped_func(*args, **kwargs):
  6.         from time import time
  7.         start = time()
  8.         sys.stderr.write('Function %s started\n' % (func.__name__,))
  9.         res = func(*args, **kwargs)
  10.         sys.stderr.write('Function %s finished in %.6fs\n' % (func.__name__, time() - start))
  11.         return res
  12.     return wrapped_func
  13.  
  14. class Problem(object):
  15.     def __init__(self, data):
  16.         self.max_len, self.message = data
  17.         self.max_len = int(self.max_len)
  18.         self.cache = {}
  19.        
  20.     def get_solution(self, msg = None):
  21.         if msg is None:
  22.             msg = self.message
  23.         if msg == '':
  24.             return 1
  25.         if msg[0] == '0':
  26.             return 0
  27.         if len(msg) == 1:
  28.             if int(msg) < self.max_len:
  29.                 return 1
  30.             return 0
  31.         if msg in self.cache:
  32.             return self.cache[msg]
  33.         result = 0
  34.         for i in range(1, 1 + len(str(self.max_len))):
  35.             ch = msg[:i]
  36.             if len(ch) < i:
  37.                 break
  38.             if int(ch) <= self.max_len:
  39.                 result += self.get_solution(msg[i:])  
  40.             else:
  41.                 break
  42.         self.cache[msg] = result
  43.         return result % 4207849484
  44.        
  45. @time_function
  46. def main():    
  47.     input_file = open('input.txt')
  48.     data = input_file.read().split()    
  49.     n = int(data.pop(0))
  50.     for i in range(1, n + 1):
  51.         args = data.pop(0), data.pop(0)
  52.         result = Problem(args).get_solution()
  53.         print "Case #%d: %s" % (i, result)    
  54.    
  55. if __name__ == '__main__':
  56.     from doctest import testmod
  57.     print >> sys.stderr, testmod()
  58.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement