Rectangular Congruence (Codeforces 1734E)
Tags: Others, number theory

You are given a prime number $$$n$$$, and an array of $$$n$$$ integers $$$b_1,b_2,\ldots, b_n$$$, where $$$0 \leq b_i < n$$$ for each $$$1 \le i \leq n$$$.You have to find a matrix $$$a$$$ of size $$$n \times n$$$ such that all of the following requirements hold:  $$$0 \le a_{i,j} < n$$$ for all $$$1 \le i, j \le n$$$.  $$$a_{r_1, c_1} + a_{r_2, c_2} \not\equiv a_{r_1, c_2} + a_{r_2, c_1} \pmod n$$$ for all positive integers $$$r_1$$$, $$$r_2$$$, $$$c_1$$$, and $$$c_2$$$ such that $$$1 \le r_1 < r_2 \le n$$$ and $$$1 \le c_1 < c_2 \le n$$$. $$$a_{i,i} = b_i$$$ for all $$$1 \le i \leq n$$$. Here $$$x \not \equiv y \pmod m$$$ denotes that $$$x$$$ and $$$y$$$ give different remainders when divided by $$$m$$$.If there are multiple solutions, output any. It can be shown that such a matrix always exists under the given constraints.

Input: The first line contains a single positive integer $$$n$$$ ($$$2 \le n < 350$$$). The second line contains $$$n$$$ integers $$$b_1, b_2, \ldots, b_n$$$ ($$$0 \le b_i < n$$$) — the required values on the main diagonal of the matrix.It is guaranteed that $$$n$$$ is prime.

Output: Print $$$n$$$ lines. On the $$$i$$$-th line, print $$$n$$$ integers $$$a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}$$$, each separated with a space.If there are multiple solutions, output any.

Note: In the first example, the answer is valid because all entries are non-negative integers less than $$$n = 2$$$, and $$$a_{1,1}+a_{2,2} \not\equiv a_{1,2}+a_{2,1} \pmod 2$$$ (because $$$a_{1,1}+a_{2,2} = 0 + 0 \equiv 0 \pmod 2$$$ and $$$a_{1,2}+a_{2,1} = 1 + 0 \equiv 1 \pmod 2 $$$). Moreover, the values on the main diagonals are equal to $$$0,0$$$ as required.In the second example, the answer is correct because all entries are non-negative integers less than $$$n = 3$$$, and the second condition is satisfied for all quadruplets $$$(r_1, r_2, c_1, c_2)$$$. For example:   When $$$r_1=1$$$, $$$r_2=2$$$, $$$c_1=1$$$ and $$$c_2=2$$$, $$$a_{1,1}+a_{2,2} \not\equiv a_{1,2}+a_{2,1} \pmod 3$$$ because $$$a_{1,1}+a_{2,2} = 1 + 1 \equiv 2 \pmod 3$$$ and $$$a_{1,2}+a_{2,1} = 2 + 1 \equiv 0 \pmod 3 $$$.  When $$$r_1=2$$$, $$$r_2=3$$$, $$$c_1=1$$$, and $$$c_2=3$$$, $$$a_{2,1}+a_{3,3} \not\equiv a_{2,3}+a_{3,1} \pmod 3$$$ because $$$a_{2,1}+a_{3,3} = 1 + 1 \equiv 2 \pmod 3$$$ and $$$a_{2,3}+a_{3,1} = 0 + 1 \equiv 1 \pmod 3 $$$.  Moreover, the values on the main diagonal are equal to $$$1,1,1$$$ as required.

Sample Inputs:
2
0 0

3
1 1 1

5
1 4 1 2 4

Sample Outputs:
0 1 
0 0

1 2 2
1 1 0
1 0 1

1 0 1 3 4
1 4 3 1 0
2 4 1 0 2
1 2 2 2 2
2 2 0 1 4

Solution (Python):
n = int(input())
a = [0] * n
b = list(map(int, input().split()))
for (i, x) in enumerate(b):
    j = i
    for _ in range(n):
        a[j % n] = x
        x = (x + i) % n
        j += 1
    print(' '.join((str(s) for s in a)))

Solution (Python):
import sys, threading, bisect, heapq, math, copy
from heapq import heappush, heappop
from functools import cmp_to_key as ctk, lru_cache
from collections import defaultdict, deque
readline = sys.stdin.readline
read = lambda : [int(x) for x in readline().split()]
alloc = lambda dfv, *s: len(s) != 1 and [alloc(dfv, *s[1:]) for _ in range(int(s[0]))] or [dfv] * int(s[0])
show = lambda arr: print(' '.join(map(str, arr)))
INF = float('inf')
MOD = 10 ** 9 + 7

def main():
    (n,) = read()
    arr = read()
    res = alloc(0, n, n)
    for i in range(n):
        res[i][i] = arr[i]
        for k in range(1, n):
            res[i][(i + k) % n] = (res[i][(i + k - 1) % n] + i) % n
    for i in range(n):
        show(res[i])
main()

Solution (Python):
n = int(input())
data = [[i * j % n for j in range(n)] for i in range(n)]
for (i, v) in enumerate(map(int, input().split())):
    delta = v - data[i][i]
    for j in range(n):
        data[i][j] += delta
        data[i][j] %= n
for a in data:
    print(' '.join((str(x) for x in a)))