本文主要是介绍codeforces:E. Rectangular Congruence【转化 + 简单构造】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
分析
关键是这句话的转化
每行的任意两个数(相同j)的差不相等
那么我们有一个想法就是,每行有一个固定的diff
diff从0取到n - 1
这个显然是对的
每行相同的j1, j2差都不一样
设为diff = 0, 1 ,…, n - 1
设gap = j2 - j1
(d2 - d1) * gap != 0 (mod n)
n为质数, gap in [1, n - 1], (d2 - d1) in [1, n - 1]
ac code
import sys
input = sys.stdin.readlinedef solve():# constructive + number theoryn = int(input())b = list(map(int, input().split()))# 每行相同的j1, j2差都不一样# 设为diff = 0, 1 ,..., n - 1# 设gap = j2 - j1# (d2 - d1) * gap != 0 (mod n)# n为质数, gap in [1, n - 1], (d2 - d1) in [1, n - 1]ans = [[0] * n for _ in range(n)]for i in range(n):ans[i][i] = b[i]# leftj = iwhile j > 0:ans[i][j - 1] = (ans[i][j] - i) % nj -= 1# rightj = iwhile j < n - 1:ans[i][j + 1] = (ans[i][j] + i) % nj += 1for row in ans:print(*row)if __name__ == '__main__':for _ in range(1):solve()
总结
简单构造
这篇关于codeforces:E. Rectangular Congruence【转化 + 简单构造】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!