题目传送门:LOJ #3160

简要题意:

有一个长度为 \(n\) 的序列 \(a\),初始时 \(a_i=i\) 或 \(a_i=i^2\),这取决于 \(\mathrm{type}\) 的值。

对这个序列进行 \(m\) 次操作,每次操作给定一个值 \(A_i\),把这个序列分为两部分:\(a[1:A_i]\) 和 \(a[A_i+1:n]\),然后在不改变两个序列内部相对顺序的限制下,均匀地将这两个序列混合,形成新的序列,则新的序列 \(a\) 即为这个混合而成的新序列。

\(Q\) 次询问经过了这 \(m\) 次操作后,某个位置上的值 \(a_{c_i}\) 的期望。

题解:

因为是均匀的混合,所以在所有 \(\displaystyle\binom{n}{A_i}\) 种混合方式中,所有方式出现的概率均是相等的。

首先打一个 \(30\) 分的 \(\mathcal{O}(m\cdot n^2)\) 的暴力,或观察样例可以发现:做任意多次操作后,序列 \(\mathbb{E}[a_i]\) 仍然是一次函数或二次函数。

这个结论可以这样感性理解:

  • 首先,初始时是一次函数或者二次函数,只需证明一个一次函数或二次函数经过一次操作后次数仍然不变即可。
  • 考虑 \(\mathbb{E}[a_i]=f(i)\),其中 \(f(x)\) 是关于 \(x\) 的一个一次函数或二次函数。
  • 经过一次给定的值为 \(k\) 的操作后,左边的第 \(i\) 项等于 \(f(i)\),右边的第 \(i\) 项等于 \(f(k+i)\),左右两边也是次数相同的函数。
  • 两个一次函数或二次函数形成的序列均匀混合后对应的函数,次数是不应当增加的,而因为最高次项系数符号相同,最高次项也不会被抵消,所以次数也不会减少。

那么每次只需求出前三项的值即可,前三项只有可能由左边序列的前三项(这已经求出)和右边序列的前三项(需要插值求出)组合而成,只要推一些简单的式子就可以求出新的前三项的值了。

以下是代码,复杂度 \(\mathcal{O}(m)\):

#include <cstdio>

typedef long long LL;
const int Mod = 998244353;
const int Inv2 = (Mod + 1) / 2; inline int qPow(int b, int e) {
int a = 1;
for (; e; e >>= 1, b = (LL)b * b % Mod)
if (e & 1) a = (LL)a * b % Mod;
return a;
}
inline int gInv(int x) { return qPow(x, Mod - 2); } int N, M, A, Q, Typ;
LL iN0, iN1, iN2;
int E1, E2, E3;
inline int GetX(int i) {
if (i == 1) return E1;
if (i == 2) return E2;
if (i == 3) return E3;
int SE1 = (LL)E1 * (i - 2) % Mod * (i - 3) % Mod;
int SE2 = (LL)E2 * (2 - i - i + Mod) % Mod * (i - 3) % Mod;
int SE3 = (LL)E3 * (i - 1) % Mod * (i - 2) % Mod;
return ((LL)SE1 + SE2 + SE3) * Inv2 % Mod;
} int main() {
freopen("landlords.in", "r", stdin);
freopen("landlords.out", "w", stdout);
scanf("%d%d%d", &N, &M, &Typ), --Typ;
iN0 = gInv(N), iN1 = gInv((LL)N * (N - 1) % Mod), iN2 = gInv((LL)N * (N - 1) % Mod * (N - 2) % Mod);
E1 = 1, E2 = Typ ? 4 : 2, E3 = Typ ? 9 : 3;
while (M--) {
scanf("%d", &A);
LL F1 = E1, F2 = E2, F3 = E3;
LL F4 = GetX(A + 1), F5 = GetX(A + 2), F6 = GetX(A + 3);
E1 = (F1 * A + F4 * (N - A)) % Mod * iN0 % Mod;
E2 = (F2 * A % Mod * (A - 1) + (F1 + F4) * A % Mod * (N - A) + F5 * (N - A) % Mod * (N - A - 1)) % Mod * iN1 % Mod;
E3 = (F3 * A % Mod * (A - 1) % Mod * (A - 2) + (F4 + F2 + F2) * A % Mod * (A - 1) % Mod * (N - A) + (F5 + F5 + F1) * A % Mod * (N - A) % Mod * (N - A - 1) % Mod + F6 * (N - A) % Mod * (N - A - 1) % Mod * (N - A - 2)) % Mod * iN2 % Mod;
}
scanf("%d", &Q);
for (int X; Q--; ) {
scanf("%d", &X);
printf("%d\n", GetX(X));
}
return 0;
}

LOJ 3160: 「NOI2019」斗主地的更多相关文章

  1. LOJ 3158: 「NOI2019」序列

    题目传送门:LOJ #3158. 题意简述: 给定两个长度为 \(n\) 的正整数序列 \(a,b\),要求在每个序列中都选中 \(K\) 个下标,并且要保证同时在两个序列中都被选中的下标至少有 \( ...

  2. LOJ 3159: 「NOI2019」弹跳

    题目传送门:LOJ #3159. 题意简述: 二维平面上有 \(n\) 个整点,给定每个整点的坐标 \((x_i,y_i)\). 有 \(m\) 种边,第 \(i\) 种边从 \(p_i\) 号点连向 ...

  3. LOJ 3156: 「NOI2019」回家路线

    题目传送门:LOJ #3156. 题意简述: 有一张 \(n\) 个点 \(m\) 条边的有向图,边有两个权值 \(p_i\) 和 \(q_i\)(\(p_i<q_i\))表示若 \(p_i\) ...

  4. @loj - 3157@「NOI2019」机器人

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 R 喜欢研究机器人. 最近,小 R 新研制出了两种机器人,分 ...

  5. loj3161「NOI2019」I 君的探险(随机化,整体二分)

    loj3161「NOI2019」I 君的探险(随机化,整体二分) loj Luogu 题解时间 对于 $ N \le 500 $ 的点,毫无疑问可以直接 $ O(n^2) $ 暴力询问解决. 考虑看起 ...

  6. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  7. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  8. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  9. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

随机推荐

  1. [LeetCode] 483. Smallest Good Base 最小的好基数

    For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...

  2. 搭建 Web 网站常用技能

    为软件创建专用数据库及其账号 create database if not exists gitea default charset = utf8mb4; grant ALL PRIVILEGES o ...

  3. 谈谈IntersectionObserver懒加载

    概念 IntersectionObserver接口(从属于Intersection Observer API)为开发者提供了一种可以异步监听目标元素与其祖先或视窗(viewport)交叉状态的手段.祖 ...

  4. 主流chatbot机器人调研

    wit.ai api.ai microsoft bot frameword rasa pydial 问答系统 语义匹配 语义表示式匹配与交互式匹配.语义表示式匹配是将用户query与候选query分别 ...

  5. Ubuntu 获取内核源码树

    输入:apt-cache search linux-source //查看内核版本 输入:apt-get install linux-source-3.0.0 //获取对应版本的内核,默认安装在/us ...

  6. 零次学习(Zero-Shot Learning)入门(转)

    很久没有更文章了,主要是没有找到zero-shot learning(ZSL)方面我特别想要分享的文章,且中间有一段时间在考虑要不要继续做这个题目,再加上我懒 (¬_¬),所以一直拖到了现在. 最近科 ...

  7. 【转】.Net程序员学习Linux最简单的方法

    有很多关于Linux的书籍.博客.大多数都会比较“粗暴“的将一大堆的命令塞给读者,从而使很多.NET程序员望而却步.未入其门就路过了. 所以我设想用一种更为平滑的学习方式, 就是在学习命令时,先用纯语 ...

  8. Window 远程桌面漏洞风险,各个厂家的扫描修复方案(CVE-2019-0708)

    自微软公司于2019年5月14日发布远程桌面服务远程代码执行漏洞(CVE-2019-0708)安全公告后,整个业界都一直在密切关注,这个漏洞编号必将在当今网络中掀起腥风血雨.各大厂商也纷纷推出自己的修 ...

  9. logstash 对配置文件conf敏感信息,密码等加密

    logstash的配置文件conf经常会涉及敏感信息,比如ES,mysql的账户密码等,以下使用logstash导入mysql为例子,加密隐藏mysql的密码. 在向keystore中添加key及其s ...

  10. .net文件上传的坑记录

    传送门:https://www.cnblogs.com/akwwl/p/3573666.html 之前错误:使用layui与web uploader上传文件都报异常,后来终于找到原因是asp.net默 ...