#gw2015i. [gw2015_i]ピラミッド - 立方体編

[gw2015_i]ピラミッド - 立方体編

问题

伊织酱的新宠是金字塔。

因为伊织酱厌倦了使用球形石头堆成的金字塔,所以他决定用边长为1的立方体状石头来建造金字塔。伊织酱按照以下步骤来建造金字塔。

  • 在一个 N×NN \times N 的网格纸上画出网格。每个格子的边长为1。我们将第 i(1iN)i (1 \leq i \leq N) 行第 j(1jN)j (1 \leq j \leq N) 列的格子称为格子 (i,j)(i,j)
  • 在每个格子里面至少放置一个石头。将 Hi,jH_{i,j} 个石头堆叠在格子 (i,j)(i,j) 上。
  • 选择一个格子。这个格子我们称之为格子 PP
  • 移除一些石头(可以是0个)。这时,剩余的石头必须构成以格子 PP 为中心的金字塔。

但是,石头构成了以格子 PP 为中心的金字塔的条件如下:

  • 假设将格子 PP 称为 (Pi,Pj)(Pi,Pj),将格子 (i,j)(i,j) 上的石头个数称为 Si,jS_{i,j},将 SPi,PjS_{Pi,Pj} 称为 TT,对于所有 i(1iN),j(1jN)i (1 \leq i \leq N), j (1 \leq j \leq N),以下等式成立。这里,Abs(x)Abs(x) 表示 xx 的绝对值。
    • $S_{i,j} = Max(0, T - Max(Abs(Pi - i), Abs(Pj - j)))$
    • Si,jMin(Pi,Pj,NPi+1,NPj+1)S_{i,j} \leq Min(Pi, Pj, N - Pi + 1, N - Pj + 1)

这时,我们称格子 PP 上的石头个数为 金字塔的高度

对于所有 i(1iN),j(1jN)i (1 \leq i \leq N), j (1 \leq j \leq N),求出以格子 (i,j)(i,j) 为中心建造金字塔时可能达到的最大高度,然后将这些最大高度求和并输出。


输入

输入包含多个测试用例。

生成测试用例的方法有点特殊,这是为了减小输入文件的大小,没有其他特别深刻的意义。

输入格式如下,从标准输入中读取:

NN QQ XX AA BB CC H1,1H_{1,1} H1,2H_{1,2} ... H1,NH_{1,N} H2,1H_{2,1} H2,2H_{2,2} ... H2,NH_{2,N} : HN,1H_{N,1} HN,2H_{N,2} ... HN,NH_{N,N}

  • 第一行包含两个整数 N(1N500)N (1 \leq N \leq 500)Q(1Q10)Q (1 \leq Q \leq 10),分别表示网格的边长和测试用例的数量。
  • 第二行包含四个整数 $X (0 \leq X < C), A (0 \leq A < C), B (0 \leq B < C), C (N \leq C \leq 30,000)$,用空格分隔。这些整数用于生成测试用例时使用的随机数。
  • 接下来的 NN 行给出了每个格子中初始放置的石头数量。其中第 ii 行(1iN1 \leq i \leq N)包含了 NN 个以空格分隔的整数,其中第 jj 个整数 Hi,j(1Hi,jN)H_{i,j} (1 \leq H_{i,j} \leq N) 表示格子 (i,j)(i,j) 中放置的石头数量。

输出

输出包含 QQ 行。其中第 ii 行表示第 ii 个测试用例的答案。输出末尾包含换行符。

你可以根据以下类似C语言的伪代码来编写代码:


int N, Q, X, A, B, C;
int H\[500\]\[500\];
int Rand() {
  return X = (A * X + B) % C;
}
void Shuffle(){
  for(int i=0;i<N*N;++i){
    int ai = Rand() % N;
    int aj = Rand() % N;
    int bi = Rand() % N;
    int bj = Rand() % N;
    if(ai==bi && aj==bj) continue;
    swap(H\[ai\]\[aj\],H\[bi\]\[bj\]);
  }
}
void main(){
  读取输入
  for(int i=0;i<Q;i++){
    计算当前N和H的答案,并输出
    if(i!=Q-1) Shuffle();
  }
  return 0;
}

示例输入1


5 3
0 7 3 101
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

示例输出1


35
27
30

第一个测试用例的网格如下:


1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

这时,以每个格子为中心建造金字塔时的最大高度如下:


1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

这些最大高度的和为35,因此输出的第一行为35。

第二个测试用例的网格如下:


2 1 2 1 1
2 1 1 1 1
1 2 1 1 1
2 2 1 1 1
1 2 1 3 2

这时,以每个格子为中心建造金字塔时的最大高度如下:


1 1 1 1