Live2D

2021/11/08 集训补题

ljs神 Orz,再一次大比分rank1,无线接近AK。膜拜nbnbnbnbnbnbnbnbnb的ljs队长。

T1

Description

有集合 \(w_{1,2,...,n}\),分到 \(k\) 个集合中,贡献是每个集合个数乘上 \(\sum w\) 的和。问总情况贡献和。

Solution

挺有意思的,想了1个多小时,像个sb一样。

考虑对于一个点计算贡献,发现只需要算出每种情况所属的集合之和的和。考虑两种情况,一种是自己当一个集合,这种情况贡献是 \(\begin{Bmatrix} n-1 \\ k-1\end{Bmatrix}\)。另外一种情况是放入其它集合,这种情况贡献就是 \(\begin{Bmatrix} n-1 \\ k\end{Bmatrix}\times (n-1+k)\)

所以直接算 \(\begin{Bmatrix} n-1 \\ k\end{Bmatrix}\)\(\begin{Bmatrix} n-1 \\ k-1\end{Bmatrix}\) 就行了。

T2

Description

\(n\) 个商店,商店两两之间都只需要 \(1\) 分钟,加入在时间 \(t\) 来到商店 \(i\) ,那么需要 \(t\times a_i+b_i\) 来排队。问在 \(T\) 之前最多能到几个商店买到东西。

Solution

考试的时候懒得继续优化了。/kk

不难发现加入我们选了 \((a_1,b_1),(a_2,b_2)\),那么 \((a_1,b_1)\)\((a_2,b_2)\) 之前的条件就是对于任意 \(t\) ,都存在 :

\[(t\times a_1+b_1+1)\times a_2+b_2<(t\times a_2+b_2+1)\times a_1+b_1 \]

\[\Rightarrow (b_1+1)\times a_2+b_2<(b_2+1)\times a_1+b_1 \]

你发现这个东西似乎是有传递性的,所以我们就可以排序之后,相当于选一个子序列出来。这个显然可以用前缀最小值做到 \(\Theta(n^2)\)

发现我们 \(a\not= 0\) 的时候,每次 \(t\) 必定翻倍,所以最多 \(\log T\) 此操作。\(a=0\) 的情况你发现可以直接加在后面。

T3

Description

给出 \(n\),表示有一个长度为 \(n\) 的序列,每个位置可以选 \((0,2^n)\),使得每个位置的值都互不相同,使得它们的异或值不为 \(0\),求方案数对 \(1000000007\) 取模。

\(n\le 10^7\)

Solution

考虑容斥,我们考虑 \(f_i\) 表示前面 \(i\) 个位置已经放好了,且互不相同,异或值为 \(0\) 的方案数。为了算 \(f_i\) 我们可以设 \(p_i\) 表示前面 \(i\) 个数互不相同的方案数,这个可以发现很好算。

可以发现 \(f_i=p_{i-1}-f_{i-1}-(2^n-i+1)\times f_{i-2}\times (i-1)\),因为你肯定需要第 \(i\) 个位置的值等于前面 \(i-1\) 个位置的异或和,所以总方案就是 \(p_{i-1}\),然后需要减去前面异或值为 \(0\) 的情况,因为这时第 \(i\) 个位置为 \(0\)。还需要减去前面有相同的值的情况,这个时候相当于有 \(i-2\) 个异或值为 \(0\),再加上两个相同的值。最后答案就是 \(p_i-f_i\)

似乎有其他的容斥做法,但我推不动。

T4

Description

有一个 \(n\) 个点的图,给每个点分配一个 \(t_i\),当 \(u,v\) 有边相连的时候会产生 \(t_u\times t_v\) 的贡献,问贡献最大值。

\(n\le 40\)

Solution

考虑 \(u,v\) 之间没有边的时候,我们设 \(s_u,s_v\) 表示与 \(u,v\) 相连的 \(t\) 之和,那么 \(u,v\) 产生的贡献之和就是 \((s_u\times t_u+s_v\times t_v)/2\)

考虑到,我们可以把 \(s\) 较小的 \(t\) 移到 \(s\) 较大的 \(t\) 上面去,这样的话答案一定不会变小。也就是说,没有边的两个点之间一定有一个 \(t=0\),换句话说,只有两个点都有值当且仅当两个点之间有边。

假设我们现在在考虑一个团大小为 \(k\),那么我们发现平均分配一定最优(均值不等式可以证明),这个时候贡献就是 \(x^2\times (1-1/k)/2\)。你发现最优情况一定是把 \(x\) 放到最大团上面。

找最大团大小可以用 meet in the middle 做到 \(\Theta(2^{n/2}n)\)

posted @ 2021-11-08 17:08  Dark_Romance  阅读(49)  评论(0编辑  收藏  举报