2022-7-16听课笔记(一)

[湖南省队集训 2021] 梧桐依旧

题目叙述

求满足以下条件的矩阵对 \((A,B)\) 的数量,满足 \(A\equiv B\times A\pmod p\) ,并且 \(\det(B)\not =0\)\(A\)\(B\) 都是 \(n\times n\) 的矩阵。

题解

容易发现,模 \(p\) 意义下的可逆矩阵和 \(\times\) 运算构成一个群。
因此,考虑逆用 burnside 定理,将 \(B\) 作为若干个操作中的一个,原题相当于对于每个操作求不动点数量之和,也就是可逆矩阵的方案数与等价类数量。
先考虑可逆矩阵的方案数,相当于 \(n\) 个线性无关的有序向量的方案数。考虑逐行确定这 \(n\) 个向量,在前 \(i-1\) 行确定而第 \(i\) 行不确定的情况下,第 \(i\) 行的方案数是 \(p^n-p^{i-1}\) 。含义是这行的总方案数去掉可以被上面 \(i-1\) 行凑出的方案数。因此方案数为 \(\prod_{i=0}^{n-1}(p^n-p^i)\)
再考虑下一个部分,求等价类数量。一个矩阵可以通过乘上另一个可逆矩阵变成另一个矩阵,这等价于这两个矩阵可以通过初等行变换互相得到,这可以通过考虑求矩阵的逆矩阵的过程发现这件事情。
而同一等价类里面的矩阵,都可以通过初等行变换得到一个固定的上三角矩阵。
首先考虑按照秩分类计算,计算秩为 \(m\) 的等价类数量。
其次可以通过秩为 \(m\) 的总矩阵方案数除以一个等价类的大小。
秩为 \(m\) 的总矩阵数量,可以理解为 \(\prod_{i=0}^{m-1}(p^n-p^i)\)
而一个等价类的大小容易通过最终的上三角凑出这个等价类的角度计算等价类的大小,这个可以理解为基底乘上一个 \(m\times m\) 的矩阵的形式,所以方案数是 \(\prod_{i=0}^{m-1}(p^m-p^i)\)

总结

  • 逆用的 burnside 定理
  • 对矩阵和秩相关问题计数的基本思路
  • 另外乘以可逆矩阵变为另一个矩阵相当于可以通过初等行变换变换为那个矩阵。

[HNOI2012]与非

题目叙述

\(n\) 个数,有一种二元运算叫做与非。C++中的表述为 \(\sim(a\&b)\)

题解

这个与非不好搞,考虑给他等价为一种操作。
首先非肯定是可以被表示出来的,\(\sim(a\&a)=\sim a\)
其次与也是可以被表示出来的,\(a\&b=\sim (\sim(a\& b))\)
而我们发现与和非两种操作也可以表示与非。因此,与非就完全等价于与和非。
那么,只要看与和非能凑出来哪些数就可以了。
为了方便,我们说明 \(a|b=~((\sim a)\&(\sim b))\)
可以发现,如果两位满足这两位在所有数中都相同,那么所有能凑出的数这两位也都相同。
考虑证明除此之外所有可能的情况都能凑出。
那么只要说明,每个只有相同组的位是 1 的数可以被凑出,剩下的数可以通过 \(|\) 操作凑出。
这是容易的,最开始先搞一个这一位(下面称之为第 \(i\) 位)是 1 的数,而剩下的每一位 \(j\) 也都存在一个数满足第 \(i\) 位与第 \(j\) 位不同,只要将这个数取反或者这个数与当前这个数按位与即可。
然后就,搞个类似于数位 dp 之类的东西就做完了。

总结

  • 想一些显然的东西,比如这题里面如果两位在所有数中状态都相同,那么必然永远都相同。
  • 另外把不好做的操作转化为好做的。

CF643F

题目叙述

\(n\) 只熊和若干桶果汁和恰好一桶酒,每一天每只熊会选择一些桶(可能不选)并各喝一 杯,喝到酒的熊会去睡觉并不再回来,通过这个信息,熊们想知道哪个桶里是酒。
只有 \(p\) 个睡 觉的位置,当睡觉的熊超过了 \(p\) 只或者所有熊都在睡觉时熊们就失败了。
\(R_i\) 表示在 \(i\) 天内桶的数量最多少,使得熊可以成功知道酒的位置。令 \(X_i = (i\times R_i) \bmod 2^{32}\),你需要求出 \(X_1 \oplus X_2 \oplus\ldots \oplus X_q\)
\(1\leq n\leq 10^9\)\(1\leq p\leq 130\)\(1\leq q \leq 2\times 10^6\)

题解

考虑我们获得的信息量是多少,也就是说能够区分多少种情况。
对于一共有 \(d\) 天的情况下:

\[\sum_{i=0}^{\min(p,n-1)}\binom{n}{i}t^i \]

能区分这么多种方案。
构造方案,我们用 \(s_{i,j}\) 表示第 \(i\) 天第 \(j\) 只熊喝的酒的集合,用 \(t_{i,j}\) 表示第 \(i\) 种结果第 \(j\) 只熊是什么时候醉倒的。
将第 \(i\) 种结果与第 \(i\) 个位置有酒对应,让第 \(t_{i,j}\) 天第 \(j\) 只熊喝第 \(i\) 个位置的酒。
这样构造出来的,每只熊每天喝哪些酒,一定不会冲突。因为喝第 \(i\) 桶酒只会在第 \(i\) 种方案里被安排。
所以上界是可以达到的。
剩下问题就是如何计算组合数。。考虑分子分母直接两两约分,分母一定就被消没了。

总结

  • 计算组合数的方式
  • 考察导致的不同结果数量

SRM502 TheCowDivOne

题目叙述

\(0\sim n-1\) 的子集数量满足这个子集大小恰好为 \(k\) 并且数的总和为 \(n\) 的倍数。

题解

方法一

考虑统计有序的数量,最后除掉 \(k!\) 即可。
考虑一位一位地填,填到第 \(k-1\) 个数的时候(确保前 \(k-1\) 个都不同),第 \(k\) 个数的取值已经确定了。
但是有可能第 \(k\) 位与前 \(k-1\) 位中的一个相同,因此需要去掉 \(\sum_{i=1}^{k-2}+2x_{k-1}\equiv 0\pmod n\) 的情况。但有可能 \(x_{k-1}\) 又与前面的相同,因此应该再去掉,如此反复。
于是,要求的是 \(\sum_{i=1}^{m-1}+tx_m\equiv 0\pmod n\) 的方案数。
考虑到这个需要 \(\sum_{i=1}^{m-1}\equiv 0\pmod \gcd(n,t)\) 。所以需要设 \(f_{p,m,t}\) 表示 \(\sum_{i=1}^{m-1}x_i+tx_m\equiv 0\pmod p\) 的方案数(其中每个数在 \(0\sim n-1\) 而不是 \(p-1\) 的范围内)。所有需要的状态中 \(p\) 一定是 \(n\) 的因数。
转移分为两部分,第一部分是计算总方案数,这应该是 \(f_{\gcd(p,t),m-1,1}\cdot \frac{n\gcd(p,t)}{p}\) 。第二部分是去掉 \(x_m\) 与前面任意一项相同的方案数,就是 \(f_{p,m-1,t+1}\cdot (m-1)\)

方法二

直接暴力无脑生成函数+单位根反演。
主要技巧在于处理 \(\prod_{j=0}^{n-1}(1+\omega_n^{ij}y)\) 上。
这个东西是一个关于 \(j\) 举有重复形式的东西,直接将 \(i\)\(n\) 的最大公因数消掉,然后变成 \((\prod_{i=0}^{d-1}(1+w_d^iy))^{n/d}\) 这样的形式,这个可以通过 \(\prod_{i=0}^{n-1}(x-\omega_{n}^i)=x^n-1\) 的方式解决掉。
后面只需要运用莫比乌斯反演和这个就可以顺利解决了。

总结

  • 第一种方法的关键是先想到前面确定最后一个就确定了,在硬着头皮容斥,到这退缩就不好了。
  • 第二种方法关键是 \(\prod_{i=0}^{n-1}(x-\omega_n^i)=x^n-1\)
posted @ 2022-07-16 22:51  YouthRhythm  阅读(149)  评论(0)    收藏  举报