#P17229. [2025年南开中学集训]猫与随机数

[2025年南开中学集训]猫与随机数

猫与随机数

题目描述

Lynette 有一个长度为 nn 的序列 aa,和长度为 55 的序列 TTqq 次询问,给定区间 [l,r][l,r] 和正整数 i,ji,j,设 aa[l,r][l,r] 中的部分为序列 bb,其长度为 m=rl+1m=r-l+1,回答以下问题:

有一条长度为 m+2m+2 的链,节点由 00m+1m+1 标号,定义一次从 iii[1,m]i\in[1,m])开始的随机游走过程为:

  • 设当前点为 uu
  • u{0,m+1}u\in\{0,m+1\},则停止。
  • 否则将费用加上 bub_u,并且以相同的概率走到 u1u-1u+1u+1

回答以下问题(均对 998244353998244353 取模):

  1. ii 开始随机游走,结束时 u=0u=0 的概率。
  2. ii 开始随机游走,经过 jj 的期望次数。
  3. ii 开始随机游走,期望费用。
  4. [1,m][1,m] 的所有点开始随机游走,经过 jj 的期望次数和。
  5. [1,m][1,m] 的所有点开始随机游走,期望费用和。

注意:初始的点也要算次数和费用。

设以上五个问题的答案为 r1,r2,r3,r4,r5r_1,r_2,r_3,r_4,r_5,你需要回答 i=15riTi\sum_{i=1}^{5}r_iT_i,这个求和不用取模。

为了避免输入输出量过大,本题采用特殊的输入输出方式。

输入格式

复制以下代码(或者在下发文件 input.cpp 中复制):

namespace Input{
    std::mt19937_64 R;
    std::uniform_int_distribution<int> D, D1;
    inline void init(int n, int m, int seed){
        R = std::mt19937_64(seed);
        D = std::uniform_int_distribution<int>(1, n);
        D1 = std::uniform_int_distribution<int>(1, m);
    }
    inline int get(){
        return D1(R);
    }
    inline void get(int &l,int &r, int &i, int &j){
        l = D(R), r = D(R), i = D(R), j = D(R);
        if(l > r) std::swap(l, r);
        if(i < l) std::swap(l, i);
        if(i > r) std::swap(i, r);
        if(j < l) std::swap(l, j);
        if(j > r) std::swap(j, r);
        if(R() & 1) std::swap(i, j);
        i -= l - 1;
        j -= l - 1;
    }
}
using Input::init;
using Input::get;

第一行 44 个整数 n,m,q,seedn,m,q,seed,分别表示序列长度、aia_i 的上限、询问次数以及随机数种子。

第二行 55 个整数,分别表示 T1,T2,T3,T4,T5T_1,T_2,T_3,T_4,T_5

在读完上面数据之后,调用 init(n, m, seed)

接下来调用 nnget() 函数,第 ii 次调用的返回值是 aia_i

接下来调用 qqget(l, r, i, j) 函数,获得一次询问的参数。

输出格式

设第 ii 次的答案为 ansians_i,输出一行一个整数表示 i=1q(i×ansi)\bigoplus_{i=1}^{q}(i\times ans_i),这里不需要取模。

样例 1 输入

5 5 3 998244353
0 1 1 0 1

样例 1 输出

1283457144

样例 1 说明

aa 序列为 [4,3,5,3,3][4,3,5,3,3],三次询问及其对应的 r2,r3,r5r_2,r_3,r_5 分别为:

  • l=1,r=2,i=2,j=2,r2=332748119,r3=665496242,r5=14l=1,r=2,i=2,j=2,r_2=332748119,r_3=665496242,r_5=14
  • l=1,r=4,i=2,j=3,r2=798595484,r3=199648893,r5=76l=1,r=4,i=2,j=3,r_2=798595484,r_3=199648893,r_5=76
  • l=1,r=3,i=2,j=1,r2=1,r3=15,r5=39l=1,r=3,i=2,j=1,r_2=1,r_3=15,r_5=39

数据范围

对于所有数据,1n,q5×1061\le n,q\le5\times10^61m9982443521\le m\le9982443521aim1\le a_i\le m1lrn1\le l\le r\le n1i,jrl+11\le i,j\le r-l+10Ti10\le T_i\le11seed<2301\le seed<2^{30}

子任务

本题采用捆绑测试,并开启所有合理的子任务依赖。

子任务编号 nn\le mm\le qq\le TT 保证为 00 的位置 分值
0 11 11 1,2,3,4,51,2,3,4,5 1
1 100100 998244352998244352 9
2 5×1035\times10^3 10
3 5×1065\times10^6 20
4 5×1035\times10^3 11 5×1065\times10^6 5
5 5×1065\times10^6 15
6 998244352998244352 2,3,4,52,3,4,5 5
7 1,3,4,51,3,4,5
8 1,2,4,51,2,4,5
9 1,2,3,51,2,3,5
10 1,2,3,41,2,3,4
11 15