第一行包含六个正整数 $n, m, \text{SA}, \text{SB}, \text{SC}, \text{lim}$,其中 $n$ 表示纬度的范围,$m$ 表示经度的范围。
为了减少输入量,每条道路的安保代价将由以下代码生成,其中addedge(a,b,c,d,w)表示 $(a, b)$ 和 $(c, d)$ 之间道路的安保代价为 $w$:
unsigned int SA, SB, SC;
int lim;
int getweight() {
SA^=SA<<16;
SA^=SA>>5;
SA^=SA<<1;
unsigned int t=SA;
SA=SB;
SB=SC;
SC^=t^SA;
return SC % lim + 1;
}
void gen() {
scanf("%d%d%u%u%u%d",&n,&m,&SA,&SB,&SC,&lim);
int i, j, w;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++) {
w=getweight();
if (j<m) {
addedge(i, j, i, j+1, w);
} else {
addedge(i, j, i,1, w);
}
}
for(i=1; i<n; i++)
for(j=1; j<=m; j++) {
w=getweight();
addedge(i, j, i+1, j, w);
}
}
第二行包含一个正整数 $q$,表示询问次数。
接下来 $q$ 行,每行两个正整数 $l_i, r_i$,依次表示每个询问。
