Domino for Young (Codeforces 1269D)
Tags: Math, combinatorics

You are given a Young diagram. Given diagram is a histogram with $$$n$$$ columns of lengths $$$a_1, a_2, \ldots, a_n$$$ ($$$a_1 \geq a_2 \geq \ldots \geq a_n \geq 1$$$).  Young diagram for $$$a=[3,2,2,2,1]$$$. Your goal is to find the largest number of non-overlapping dominos that you can draw inside of this histogram, a domino is a $$$1 \times 2$$$ or $$$2 \times 1$$$ rectangle.

Input: The first line of input contain one integer $$$n$$$ ($$$1 \leq n \leq 300\,000$$$): the number of columns in the given histogram.The next line of input contains $$$n$$$ integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \leq a_i \leq 300\,000, a_i \geq a_{i+1}$$$): the lengths of columns.

Output: Output one integer: the largest number of non-overlapping dominos that you can draw inside of the given Young diagram.

Note: Some of the possible solutions for the example: 

Sample Inputs:
5
3 2 2 2 1

Sample Outputs:
4

Solution (Python):
n = int(input())
a = list(map(int, input().split()))
(b, w) = (0, 0)
for i in range(0, n):
    b += a[i] // 2
    w += a[i] // 2
    if a[i] % 2 == 1:
        if i % 2 == 0:
            b += 1
        else:
            w += 1
print(min(b, w))

Solution (Python):
n = int(input())
arr = list(map(int, input().split()))
(x, y) = (0, 0)
for i in range(n):
    if i % 2 == 0:
        x += arr[i] // 2
        y += arr[i] // 2
        x += arr[i] % 2
    else:
        x += arr[i] // 2
        y += arr[i] // 2
        y += arr[i] % 2
print(min(x, y))

Solution (Python):
for _ in range(1):
    n = int(input())
    arr = sorted(list(map(int, input().split())))
    cnt = 0
    for i in range(n):
        cnt += arr[i] + (i & 1) >> 1
    print(min(sum(arr) - cnt, cnt))