#P12976. 受力分析 Force

受力分析 Force

题目背景

还在写题的 Comentropy 突然收到了挑战,竟然是一道力学题!他感到震惊,一看到数据范围就知道该怎么写了,但是过程冗长,于是找到你帮他精简一下。

注:本题没有严格的物理理论基础,且本题并不要求物理基础。

建议阅读形式化题意。

题目描述

现在有 n×nn\times n 个正方体物块摆成一个方阵,物块有自己的重量,你现在需要控制它们平衡不动。这就要求对于第 ii 行第 jj 列的物块,它底面受到的支持力在区间 [li,j,ri,j][l_{i,j},r_{i,j}] 中。

出题人们给出横纵方向各 nn 根钢丝用以给底面支持力,并把物块放置在钢丝交点处。现在你可以给这 2n2n 根钢丝分别施加力。(注意同一根钢丝处处的力是相同的)

规定:在数值上,物块受到的支持力就是你施加给其下的两根钢丝的力的和。

如图,有两组钢丝一组横着放,施加给它们的力分别是:[x1,x2,,xn][x_1,x_2,\dots,x_n];一组竖着放,施加给它们的力分别是:[y1,y2,,yn][y_1,y_2,\dots,y_n],交点 (i,j)(i,j) 处的合力即为:xi+yjx_i+y_j

请你求出每根钢丝的使用力的情况。出题人们为了难倒 Comentropy,还要求序列 [x1,x2,,xn,y1,y2,yn][x_1,x_2,\dots,x_n,y_1,y_2\dots,y_n] 的字典序最小。你能帮他处理这个问题吗?

每个力都应当是非负整数,方向向上。

形式化地: 给出两个 n×nn\times n 的矩阵 l,rl,r,要求 li,jxi+yjri,jl_{i,j}\leq x_i+y_j \leq r_{i,j},求一个字典序最小的非负整数解的序列 {x}\{x\}, {y}\{y\}(把 xxyy 的序列并起来 [x1,x2,,xn,y1,y2,,yn][x_1,x_2,\dots,x_n,y_1,y_2,\dots,y_n] 的字典序最小)。

输入格式

第一行,一个正整数 n(1n500)n(1\leq n \leq 500) 表示这是一个 n×nn \times n 的矩阵。

22n+1n+1 行,一个矩阵表示受力下界 ll

n+2n+2 到第 2n+12n+1 行,又一个矩阵表示受力上界 rr

输出格式

如果无解,直接输出 -1

否则:

第一行 nn 个数,表示横排钢丝的受力 x1,...,xnx_1,...,x_n

第二行 nn 个数,表示竖排钢丝的受力 y1,...,yny_1,...,y_n

注意如有多组答案,请输出字典序最小的一组。

2
2 4
1 5
3 5
2 7
0 0 
2 5

提示

样例 1 解释: 可能有另一组解 x1=2,x2=2,y1=0,y2=3x_1=2,x_2=2,y_1=0,y_2=3,但是 {0,0},{2,5}\{0,0\},\{2,5\} 是一组字典序更小的解,且能证明字典序最小。

对于 10%10\% 的数据,保证 1n7,0ri,j71\leq n\leq 7,0 \leq r_{i,j}\leq 7

对于 20%20\% 的数据,保证 1n501\leq n\leq 501li,jri,j2001 \leq l_{i,j}\leq r_{i,j} \leq 200

对于 40%40\% 的数据,保证 1n2001\leq n\leq 200

对于另外 20%20\% 的数据,保证 li,j=ri,jl_{i,j}=r_{i,j}

对于 100%100\% 的数据,保证 1n5001\leq n\leq 5000li,jri,j1090 \leq l_{i,j} \leq r_{i,j} \leq 10^9

请注意常数给程序带来的运行效率影响。