Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from time import clock
- def check(mid, n, m, data, a, b):
- i = 0
- seg = 1
- while i < m and seg < n + 1:
- left = right = seg
- while right < n + 1 and \
- min(abs(right - data[i][0]), abs(left - data[i][0])) \
- * a + (right - left) * a + (right - left + 1) * b < mid + 1:
- right += 1
- seg = right
- i += 1
- return seg > n
- def gen(mid, n, m, data, a, b):
- i = 0
- seg = 1
- ans = [list() for _ in range(m)]
- while i < m and seg < n + 1:
- left = right = seg
- while right < n + 1 and \
- min(abs(right - data[i][0]), abs(left - data[i][0])) \
- * a + (right - left) * a + (right - left + 1) * b < mid + 1:
- ans[data[i][1]].append(right)
- right += 1
- if ans[data[i][1]]:
- last = ans[data[i][1]][-1]
- if abs(left - data[i][0]) > abs(last - data[i][0]):
- ans[data[i][1]] = ans[data[i][1]][::-1]
- seg = right
- i += 1
- return ans
- def solve(n, m, paint, a, b):
- paint.sort()
- l = 0
- r = (2 * a + b) * n
- while r - l > 1:
- mid = (r + l) // 2
- if check(mid, n, m, paint, a, b):
- r = mid
- else:
- l = mid
- ans = gen(r, n, m, paint, a, b)
- print(r)
- for i in range(m):
- print(len(ans[i]), *ans[i])
- # fin = open('test.txt', 'r')
- # sys.stdin = fin
- # print(clock())
- n, m = map(int, input().split())
- a, b = map(int, input().split())
- data = list(map(int, input().split()))
- paint = []
- for i in range(m):
- paint.append((data[i], i))
- solve(n, m, paint, a, b)
- # print(clock())
Advertisement
Add Comment
Please, Sign In to add comment