第一行包含六个正整数 $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$,依次表示每个询问。