Increasing and Decreasing (Codeforces 1864A)
Tags: Math, constructive algorithms

You are given three integers $$$x$$$, $$$y$$$, and $$$n$$$.Your task is to construct an array $$$a$$$ consisting of $$$n$$$ integers which satisfies the following conditions:  $$$a_1=x$$$, $$$a_n=y$$$;  $$$a$$$ is strictly increasing (i.e. $$$a_1 < a_2 < \ldots < a_n$$$);  if we denote $$$b_i=a_{i+1}-a_{i}$$$ for $$$1 \leq i \leq n-1$$$, then $$$b$$$ is strictly decreasing (i.e. $$$b_1 > b_2 > \ldots > b_{n-1}$$$). If there is no such array $$$a$$$, print a single integer $$$-1$$$.

Input: Each test contains multiple test cases. The first line contains the number of test cases $$$t$$$ ($$$1 \le t \le 1000$$$). The description of the test cases follows.The only line of each test case contains three integers $$$x$$$, $$$y$$$, $$$n$$$ ($$$1 \le x < y \le 1000,3 \le n \le 1000$$$).

Output: For each test case, output $$$n$$$ integers $$$a_1,a_2,\ldots,a_n$$$. If there are multiple solutions, print any of them.If there is no solution, print a single integer $$$-1$$$.

Note: In the first test case, $$$a=[1,3,4]$$$, which is strictly increasing. Next, $$$b_1=a_2-a_1=3-1=2$$$, $$$b_2=a_3-a_2=4-3=1$$$, thus $$$b=[2,1]$$$, which is strictly decreasing.In the second test case, there is no array $$$a$$$ that satisfies all the conditions above.

Sample Inputs:
3
1 4 3
1 3 3
100 200 4

Sample Outputs:
1 3 4
-1
100 150 180 200

Solution (Python):
for _ in range(int(input())):
    (x, y, n) = list(map(int, input().split()))
    ap = int(n / 2 * (n - 1))
    if y - x < ap:
        print(-1)
        continue
    (ans, c) = ([y], 1)
    n -= 1
    while n > 1:
        ans.append(ans[-1] - c)
        c += 1
        n -= 1
    ans.append(x)
    ans = ans[::-1]
    print(' '.join(map(str, ans)))

Solution (Python):
t = int(input())
for _ in range(t):
    (x, y, n) = map(int, input().split())
    arr = []
    if y - x < n * (n - 1) // 2:
        print(-1)
    else:
        arr.append(y)
        for i in range(n - 2):
            arr.append(arr[-1] - i - 1)
        arr.append(x)
        print(' '.join((str(i) for i in arr[::-1])))

Solution (Python):
for _ in range(int(input())):
    (x, y, n) = map(int, input().split())
    b = []
    b.append(y)
    c = 0
    m = 0
    if int(y - x) < n:
        print(-1)
    else:
        for i in range(n - 2, -1, -1):
            c = n - i - 1
            b.append(y - int(c * (c + 1) / 2))
            if y < c * (c + 1) / 2:
                m = 1
                break
        if m == 1:
            print(-1)
        else:
            b.reverse()
            if b[0] >= x:
                b.pop(0)
                b.insert(0, x)
                for i in range(len(b)):
                    print(b[i], end=' ')
                print()
            else:
                print(-1)