Number of Apartments (Codeforces 1430A)
Tags: Math, brute force

Recently a new building with a new layout was constructed in Monocarp's hometown. According to this new layout, the building consists of three types of apartments: three-room, five-room, and seven-room apartments. It's also known that each room of each apartment has exactly one window. In other words, a three-room apartment has three windows, a five-room — five windows, and a seven-room — seven windows.Monocarp went around the building and counted $$$n$$$ windows. Now he is wondering, how many apartments of each type the building may have.Unfortunately, Monocarp only recently has learned to count, so he is asking you to help him to calculate the possible quantities of three-room, five-room, and seven-room apartments in the building that has $$$n$$$ windows. If there are multiple answers, you can print any of them.Here are some examples:  if Monocarp has counted $$$30$$$ windows, there could have been $$$2$$$ three-room apartments, $$$2$$$ five-room apartments and $$$2$$$ seven-room apartments, since $$$2 \cdot 3 + 2 \cdot 5 + 2 \cdot 7 = 30$$$;  if Monocarp has counted $$$67$$$ windows, there could have been $$$7$$$ three-room apartments, $$$5$$$ five-room apartments and $$$3$$$ seven-room apartments, since $$$7 \cdot 3 + 5 \cdot 5 + 3 \cdot 7 = 67$$$;  if Monocarp has counted $$$4$$$ windows, he should have mistaken since no building with the aforementioned layout can have $$$4$$$ windows. 

Input: Th first line contains one integer $$$t$$$ ($$$1 \le t \le 1000$$$) — the number of test cases.The only line of each test case contains one integer $$$n$$$ ($$$1 \le n \le 1000$$$) — the number of windows in the building.

Output: For each test case, if a building with the new layout and the given number of windows just can't exist, print $$$-1$$$.Otherwise, print three non-negative integers — the possible number of three-room, five-room, and seven-room apartments. If there are multiple answers, print any of them.


Sample Inputs:
4
30
67
4
14

Sample Outputs:
2 2 2
7 5 3
-1
0 0 2

Solution (Python):
t = int(input())
while t > 0:
    n = int(input())
    if n == 1 or n == 2:
        print(-1)
    elif n == 4:
        print(-1)
    elif n % 3 == 0:
        print(*[n // 3, 0, 0])
    elif n % 3 == 2:
        print(*[n // 3 - 1, 1, 0])
    elif n % 3 == 1:
        print(*[n // 3 - 2, 0, 1])
    t -= 1

Solution (Python):
for i in range(int(input())):
    n = int(input())
    if n == 1 or n == 2 or n == 4:
        print(-1)
    elif n % 3 == 0:
        print(n // 3, 0, 0)
    elif n % 3 == 1:
        print((n - 7) // 3, 0, 1)
    elif n % 3 == 2:
        print((n - 5) // 3, 1, 0)

Solution (Python):
def main():
    n = int(input())
    if n < 3:
        return -1
    if n % 7 == 0:
        return [0, 0, n // 7]
    if n % 5 == 0:
        return [0, n // 5, 0]
    if n % 3 == 0:
        return [n // 3, 0, 0]
    ans = [0, 0, 0]
    for i in range(3, 8, 2):
        m = n - i
        if m < 3:
            return -1
        if m % 3 == 0:
            ans[0] = m // 3
        elif m % 5 == 0:
            ans[1] = m // 5
        elif m % 7 == 0:
            ans[2] = m // 7
        if m % 3 == 0 or m % 5 == 0 or m % 7 == 0:
            if i == 3:
                ans[0] += 1
            if i == 5:
                ans[1] += 1
            if i == 7:
                ans[2] += 1
            return ans
    return -1
for _ in range(int(input())):
    z = main()
    if z == -1:
        print(-1)
    else:
        print(*z)