Advertisement
AlexG2230954

task_b

Nov 9th, 2024
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | None | 0 0
  1. import copy
  2. from itertools import combinations, product
  3. import sys
  4. import time
  5.  
  6. A1, A2 = 6, 9
  7.  
  8. for n in range(A1, A2 + 1):
  9.     for m in range(n, A2 + 1):
  10.         def _next_pos(i, j):
  11.             if i == n - 1:
  12.                 return (0, j + 1)
  13.             return (i + 1, j)
  14.  
  15.  
  16.         def f(A, i, j):
  17.             if i >= n or j >= m:
  18.                 yield A
  19.                 return
  20.  
  21.             a1 = i in (0, n - 1) or A[i - 1][j] != '1'
  22.             a2 = j in (0, m - 1) or A[i][j - 1] != '1'
  23.             i2, j2 = _next_pos(i, j)
  24.  
  25.             if a1 or a2:
  26.                 A[i][j] = '1'
  27.                 yield from f(A, i2, j2)
  28.  
  29.             else:
  30.                 for a in f(A, i2, j2):
  31.                     for char in '*+1':
  32.                         A[i][j] = char
  33.                         yield a
  34.  
  35.         best_answer = float('inf')
  36.  
  37.         def calc(A):
  38.             s = 0.0
  39.  
  40.             for row in A:
  41.                 s += eval(''.join(row))
  42.                 if s >= best_answer:
  43.                     return None
  44.  
  45.             for j in range(len(A[0])):
  46.                 col = ''.join(row[j] for row in A)
  47.                 s += eval(col)
  48.                 if s >= best_answer:
  49.                     return None
  50.  
  51.             return s
  52.  
  53.  
  54.         start = time.time()
  55.         A = [[None] * m for _ in range(n)]
  56.         best_A = None
  57.  
  58.         for a in f(A, 0, 0):
  59.             ans = calc(a)
  60.             if ans is not None:
  61.                 best_answer = ans
  62.                 best_A = copy.deepcopy(a)
  63.         end = time.time()
  64.  
  65.         print((n, m), best_answer, end - start, file=sys.stderr)
  66.         print((n, m), best_answer, end - start, flush=True)
  67.         for row in best_A:
  68.             print(''.join(row), flush=True)
  69.         print(flush=True)
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement