#P12407. 「CZOI-R3」数字变换

    ID: 13517 远端评测题 3000ms 512MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>动态规划 DP图论洛谷原创O2优化图论建模最短路洛谷比赛

「CZOI-R3」数字变换

题目描述

你有一个长度为 nn 的序列 xx 和一个数 a=pa=p

序列 xx 的第 ii 个数具有一个花费序列 wi,1,wi,2,,wi,kw_{i,1},w_{i,2},\dots,w_{i,k}

你可以将 aa 变换成 ii1in1\le i\le naa 可以等于 ii),当前是你的第 jj 次操作,则花费为 wi,j+2×(L(xa&xi))w_{i,j} + 2\times(L-(x_a \mathbin{\&} x_i)),其中 &\mathbin{\&} 是按位与,即 C++ 中的 &

LL 是序列 xx 中所有数的最大值,即 max1inxi\max\limits_{1\le i\le n}x_i

你需要对所有 1in1\le i\le n 求出在第 kk 步操作结束时aa 变成 ii最小花费。询问之间互相独立,每次询问不会影响其他次询问的答案。

输入格式

由于直接输入数据量过大,请使用以下方式读入数据:

第一行输入 55 个整数 n,p,k,c,seedn,p,k,c,seed,其中 c,seedc,seed 的意义在下文给出。

第二行输入 cc 个整数 y0,y1,,yc1y_0,y_1,\dots,y_{c-1},其中 yiy_i 的意义在下文给出。

读入后使用以下函数获得输入:

int c, y[65536]; unsigned long long seed;
int get_rand(int mod)
{
    seed ^= seed << 14;
    seed ^= seed >> 7;
    seed ^= seed << 19;
    seed ^= seed << 23;
    return seed % mod;
}
void get_input()
{
    for (int i = 1; i <= n; i++) x[i] = y[get_rand(c)];
    for (int i = 1; i <= n; i++) for (int j = 1; j <= k; j++) w[i][j] = get_rand(1000000);
}

你需要调用的是 get_input 函数。

注意:此输入方式仅为减小输入量,标准解法并不依赖此输入方式。

输出格式

共一行输出 nn 个正整数,第 ii 个表示将 aa 变成 ii 的最小花费。

3 1 2 3 1025032617
1 2 3
730965 742898 1038257

提示

【样例解释】

$x = \{3, 1, 3\},w_1 = \{834731, 259456\},w_2 = \{471501, 271389\} ,w_3 = \{902700, 566748\},a=1,L=3$。

aa 变为 22 的最优操作是第一次 a2a\to 2 花费 w2,1+2×(33&1)=471505w_{2,1} + 2\times(3-3\& 1)= 471505,第二次 a2a\to 2 花费 w2,2+2×(31&1)=271393w_{2,2} + 2\times(3-1\& 1)= 271393,总花费为 742898742898

【数据范围】

  • Subtask #1(15 pts15\text{ pts}):k=1k = 1xi<212x_i < 2^{12}
  • Subtask #2(25 pts25\text{ pts}):c103c\le 10^3(最多只有 10310^3 种不同的 xix_i),xi<212x_i < 2^{12}
  • Subtask #3(25 pts25\text{ pts}):max{popcount(xi)}5\max\{\text{popcount}(x_i)\} \le 5。其中 popcount(xi)\text{popcount}(x_i) 表示 xix_i 在二进制下 11 的个数。
  • Subtask #4(35 pts35\text{ pts}):无特殊限制。

对于 100%100\% 的数据,1n2×1051 \le n \le 2 \times 10^51k101 \le k \le 100xi<2160\le x_i<2^{16}1pn1 \le p \le n0wi,j<1060\le w_{i,j}<10^61seed2×1091\le seed \le 2\times 10^91c2161\le c \le 2^{16}0yi<2160 \le y_i < 2^{16}