Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.41 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.     assert(1 <= n and n <= 100000)
  45.     assert(len(l) == n and len(r) == n and len(s) == n)
  46.     for i in range(n):
  47.         assert(1 <= l[i] and l[i] <= r[i] and r[i] <= 1000000000)
  48.         assert(s[i] == 'b' or s[i] == 'u' or s[i] == 'i')
  49.    
  50.     seg = []
  51.     seg.append(get_segment(l, r, s, 'b'))
  52.     seg.append(get_segment(l, r, s, 'u'))
  53.     seg.append(get_segment(l, r, s, 'i'))
  54.    
  55.     res = 1000000000
  56.    
  57.     for a in range(2):
  58.         for b in range(2):
  59.             for c in range(2):
  60.                 if (a == 1 or b == 1 or c == 1):
  61.                     continue
  62.                 x = seg[0]
  63.                 if (a == 1):
  64.                     x = rev(seg[0])
  65.                 y = seg[1]
  66.                 if (b == 1):
  67.                     y = rev(seg[1])
  68.                 z = seg[2]
  69.                 if (c == 1):
  70.                     z = rev(seg[2])
  71.                 cur = len(x) + len(y) + len(z)
  72.                 q = []
  73.                 for i in x:
  74.                     q.append(i)
  75.                 for i in y:
  76.                     q.append(i)
  77.                 for i in z:
  78.                     q.append(i)
  79.                 q.sort()
  80.                 it = 0
  81.                
  82.                 while (it != len(q)):
  83.                     nit = it
  84.                     while (nit < len(q) and q[nit] == q[it]):
  85.                         nit += 1
  86.                     it = nit
  87.                     cur += 1
  88.                
  89.                 res = min(res, cur)
  90.     return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement