Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.91 KB | None | 0 0
  1. def get_segment(l, r, s, c):
  2.     v = []
  3.    
  4.     for i in range(len(s)):
  5.         if (s[i] != c):
  6.             continue
  7.         v.append([l[i], r[i]])
  8.     v.sort()
  9.     seg = []
  10.    
  11.     it = 0
  12.    
  13.     while (it < len(v)):
  14.         nit = it + 1
  15.         rig = v[it][1]
  16.         lef = v[it][0]
  17.        
  18.         while (nit < len(v) and v[nit][0] <= rig + 1):
  19.             rig = max(rig, v[nit][1])
  20.             nit += 1
  21.         seg.append([lef, rig])
  22.         it = nit
  23.     return seg
  24.  
  25. def rev(seg):
  26.     if (len(seg) == 0):
  27.         return seg
  28.     ans = []
  29.     ans.append([1, 1000000000])
  30.     prev = 1
  31.     for i in range(len(seg)):
  32.         if (seg[i][0] != prev):
  33.             ans.append([prev, seg[i][0]])
  34.         prev = seg[i][1] + 1
  35.     if (prev != 1000000000):
  36.         ans.append([prev + 1, 1000000000])
  37.     return ans
  38.  
  39. def textFormatting(starting, ending, style):
  40.     n = len(starting)
  41.     l = starting
  42.     r = ending
  43.     s = style
  44.    
  45.     seg = []
  46.     seg.append(get_segment(l, r, s, 'b'))
  47.     seg.append(get_segment(l, r, s, 'u'))
  48.     seg.append(get_segment(l, r, s, 'i'))
  49.    
  50.     res = 1000000000
  51.    
  52.     for a in range(2):
  53.         for b in range(2):
  54.             for c in range(2):
  55.                 if (a == 1 or b == 1 or c == 1):
  56.                     continue
  57.                 x = seg[0]
  58.                 if (a == 1):
  59.                     x = rev(seg[0])
  60.                 y = seg[1]
  61.                 if (b == 1):
  62.                     y = rev(seg[1])
  63.                 z = seg[2]
  64.                 if (c == 1):
  65.                     z = rev(seg[2])
  66.                 cur = len(x) + len(y) + len(z)
  67.                 q = []
  68.                 for i in x:
  69.                     q.append(i)
  70.                 for i in y:
  71.                     q.append(i)
  72.                 for i in z:
  73.                     q.append(i)
  74.                 cur *= 2
  75.                
  76.                 res = min(res, cur)
  77.     return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement