杂题20200314

CF938E Max History

定义一个序列 \(a\) 的值 \(f_a\) 如下:

  • 初始 \(f_a=0,\ M=1\)
  • 对于 \(2\leq i\leq n\) ,若 \(a_M<a_i\) ,则将 \(f_a\) 加上 \(a_M\) ,并让 \(M=i\)

计算给定序列 \(a\)\(n!\) 个排列的 \(f_a\) 之和,答案模 \(10^9+7\)

\(n\leq10^6\)\(a_i\leq10^9\)

考虑 \(a\) 中每个数对答案造成的贡献,对于数 \(x\) ,假设它出现了 \(u\) 次,严格大于 \(x\) 的数出现了 \(v\) 次, \(x\) 会对 \(a\) 的某个排列 \(b\)\(f_b\) 造成贡献当且仅当 \(b\) 中第一个大于等于 \(x\) 的数是 \(x\) ,对于随机排列,这个概率是 \(\frac{u}{u+v}\) ,因为 \(x\) 必须是 \(u+v\) 个数中第一个出现的。因此答案即为每个数的概率乘上 \(n!\) 之和

接下来是又臭又长的标算解法,得出的式子是和概率解法一样的

同样的,考虑 \(a\) 中每个数对答案造成的贡献,注意到数 \(x\) 只有满足在排列中所有它之前的数都严格小于它才会产生贡献,假设序列中严格小于 \(x\) 的数的个数为 \(k\) ,则造成贡献的次数为 \(\displaystyle\sum_{i=0}^{k}\binom{k}{i}\times(n-i-1)!\times i!\) ,即枚举 \(k\) 个数中有 \(i\) 个在排列中被放在了 \(x\) 之前

把组合数拆开,提出 \(k!\) ,得到 \(k!\displaystyle\sum_{i=0}^k\frac{(n-i-1)!}{(k-i)!}\)

给里面强行配一个 \(\frac{1}{(n-k-1)!}\) ,得到 \(k!(n-k-1)!\displaystyle\sum_{i=0}^k\binom{n-i-1}{n-k-1}\)

由于 \(\displaystyle\binom{m}{m}+\binom{m+1}{m}+\cdots+\binom{n}{m}=\binom{n+1}{m+1}\)

原式即为 \(k!(n-k-1)!\displaystyle\binom{n}{n-k}\)

因此答案为 \(\displaystyle\sum_{i=1}^na_i\times k_i!(n-k_i-1)!\binom{n}{n-k_i}=\sum_{i=1}^n\frac{a_i\times n!}{n-k_i}\) ,注意要去掉 \(a\) 中最大值的贡献


CF1292C Xenon's Attack on the Gangs

给定一棵 \(n\) 个点的树,需要给每条边分配一个互不相同的 \([0,\ n-2]\) 的整数权值

定义 \(S_{path(s,\ t)}=\operatorname{mex}_{(u,\ v)\in path(s,\ t)}w(u,\ v)\)

最大化 \(\displaystyle\sum_{1\leq s<t\leq n}S_{path(s,\ t)}\)

\(n\leq3000\)

若将 \((u,\ v)\) 赋值为 \(0\) ,则答案会加上删掉 \((u,\ v)\) 后,树两部分的大小乘积

显然边权为 \(1\) 的边一定会放在 \((u,\ v)\) 的邻边,边权为 \(2\) 的边一定会放在 边权为 \(0\)\(1\) 的边 的邻边……如此填成一条路径

\(dp_{u,\ v}\) 为用边权小于 \(dis(u,\ v)\) 的数填完路径 \(u,\ v\) 后,答案的最大值

考虑令 \(s_{u,\ v}\) 为以 \(u\) 为根时, \(v\) 的子树大小,令 \(p_{u,\ v}\) 为以 \(u\) 为根时, \(v\) 的父节点

可以发现 \(dp_{u,\ v}=\max(dp_{u,\ p_{u,\ v}},\ dp_{v,\ p_{v,\ u}})+s_{u,\ v}\times s_{v,\ u}\) ,用记搜实现即可


CF1322C Instant Noodles

  • \(T\) 组测试数据
  • 给出一张点数为 \(2n\) 的二分图,其中右侧的第 \(i\) 个点有点权为 \(c_i\)
  • \(S\) 表示左侧点的一个非空点集,设 \(f(S)\) 表示右侧点中至少与 \(S\) 中一个点相连的点的点权和
  • 请你求出,对于所有非空集合 \(S\)\(f(S)\)\(\gcd\)
  • \(1 \leq t,\sum n,\sum m \leq 5\times 10^5\)\(1 \leq c_i \leq 10^{12}\)

考虑两个右部点 \(u,\ v\) ,它们对应的左部点集合分别为 \(R(u),\ R(S)\) ,分以下几种情况讨论:

  1. \(R(u)=R(v)\) ,可以直接将两个点合并,点权相加
  2. \(R(u)\subseteq R(v)\) ,若存在 \(w\in S\) 满足 \(w\in R(v),\ w\notin R(u)\) ,点权和为 \(c_v\) ;否则为 \(c_u+c_v\) 。此时 \(\gcd(c_v,\ c_u+c_v)=\gcd(c_v,\ c_u)\)
  3. \(R(u)\cap R(v)\neq\varnothing\) ,且 \(S(u),\ S(v)\) 没有包含关系,感性理解可以用 \(\gcd(c_u,\ c_v)\) 计算贡献
  4. \(R(u)\cap R(v)=\varnothing\) ,此时 \(u,\ v\) 互不影响,可以用 \(\gcd(c_u,\ c_v)\) 计算贡献

因此将所有 \(R(u)=R(v)\) 的点缩成一个点,点权为包含点点权之和,求缩完后的点的 \(\gcd\) ,判定 \(R(u)=R(v)\) 可以用 hash


Luogu4151 [WC2011]最大XOR和路径

给定一张带权无向连通图,有重边、自环,找一条 \(1\)\(n\) 的路径(不要求是简单路径),使得边权异或值最大

  • \(n\leq5\times10^4,\ m\leq10^5\)
  • \(w_i\leq10^{18}\)

线性基学习笔记

一 份 题 解


CF938G Shortest Path Queries

给定一张带权无向连通图,有 \(q\) 个操作:

  1. 给定 \(x,\ y,\ d\) ,在原图中添加一条 \(x,\ y\) 之间边权为 \(d\) 的边
  2. 给定 \(x,\ y\) ,将图中 \(x,\ y\) 之间的边删掉
  3. 给定 \(x,\ y\) ,查询 \(x\)\(y\) 的异或最短路

保证任意操作后原图连通无重边自环,且操作合法

  • \(n, m, q\leq2\times10^5\)
  • \(0\leq d<2^{30}\)

像上一道题,如果没有删边操作可以直接用线性基维护,否则用线段树分治,用可撤销并查集维护异或前缀和,在线段树上维护 \(\log\) 个线性基,时间复杂度 \(O(n\log^2)\)


牛客练习赛59C

\(x\) 件材料 \(A\)\(y\) 件材料 \(B\) ,用 \(2\) 件材料 \(A\)\(3\) 件材料 \(B\) 可以合成一件装备,用 \(4\) 件材料 \(A\)\(1\) 件材料 \(B\) 也可以合成一件装备。最大化合成的装备的数量

假设用第一种方式合成了 \(a\) 次,用第二种方式合成了 \(b\) 次,原题即为在满足 \(\begin{cases}2a+4b\leq x\\3a+b\leq y\end{cases}\) 的条件下最大化 \(a+b\)

二分最后的答案 \(mid\) ,由于 \(a+b=mid\) ,将上述不等式减去 \(mid\) 得到 \(\begin{cases}2b\leq x-2mid\\2a\leq y-2mid\end{cases}\) ,即判定满足这个条件时 \(a+b\) 是否大于等于 \(mid\)


牛客练习赛59F

小松鼠站在地面上,地面上长了 \(m\) 棵松树从左到右排成一排,不妨用一维坐标表示每棵松树的位置,第 \(i\) 棵松树的位置为 \(a_i\) 。每棵松树分为树干部分和树叶部分,树叶部分会掉落果实,第 \(i\) 棵松树树干的长度为 \(b_i\)

\(n\) 个松果会从松树上掉落,第 \(i\) 个松果会在 \(t_i\) 时刻在第 \(p_i\) 棵松树的树叶上掉落,价值是 \(c_i\) 。小松鼠最开始可以站在任意位置,它单位时间内的移动速度为 \(1\) ,松果单位时间内掉落的速度为 \(1\) ,如果一个松果掉落到地面,并且小松鼠正好站在松果掉落的地方,小松鼠就会立即把松果吃掉,否则 \(0.5\) 秒后松果就会消失,小松鼠吃坚果不消耗时间。

小松鼠想最大化吃到的松果的价值,但是小松鼠不知道怎么才能吃到,于是这个问题就交个聪明的你了。

  • \(n,\ m\leq10^5\)
  • \(a_i,\ b_i,\ t_i,\ c_i\leq10^9\)

留坑待填

猜你喜欢

转载自www.cnblogs.com/Juanzhang/p/12490141.html
今日推荐