题目链接:https://ac.nowcoder.com/acm/contest/881/D

看此博客之前请先参阅吕凯飞的论文《集合幂级数的性质与应用及其快速算法》,论文中很多符号会被本文延用!

题目大意

  给定一个 n * m 的二维矩阵和 k,定义$count(x) = \sum\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} [v_{i, j} \& x 所表示的二进制位有奇数个一] $,求如下式子:

$$\begin{align*}
\bigoplus\limits_{x = 0}^{2^k - 1} (count(x) * 3^x mod (10^9 + 7))
\end{align*}$$

分析

  首先对于每一个数 x,给它的 k 位二进制位标号,从 1 ~ k,那么每一个数就可以唯一用一个集合 X 来表示,比如 k = 5, x = 10110,那么 X = {2, 3, 5}。
  定义 U 为全集,包含全部 1 ~ k。(为了方便,后面对应字母的大写就代表这个数对应的集合)
  于是我们可以重新定义 count(x) :$count(x) = count(X) = \sum\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} [V_{i, j} \cap X 有奇数个元素] $。
  进而:$count(X) = \frac{1}{2^m}\sum\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} (1 - (-1)^{|V_{i, j} \cap X|}) $,其中:$\prod\limits_{j = 1}^{m} (1 - (-1)^{|V_{i, j} \cap X|}) = 1 + \sum\limits_{j = 1}^{m} (-1)^{|X \cap V_{i, j}| + 1} + \sum\limits_{j_1 = 1}^{m} \sum\limits_{j_2 = 1}^{m} [j_1 \neq j_2] (-1)^{|X \cap V_{i, j_1} \cap V_{i, j_2}| + 2} + \dots + (-1)^{|X \cap (\bigcap\limits_{j = 1}^m V_{i, j})| + m}$
   又:$(-1)^{|Y|} * (-1)^{|X \cap T|} = (-1)^{|(X \cap T) \oplus Y|} = (-1)^{|(X \oplus Y) \cap (T \oplus Y)|}$
 
   ????????????????????(求大佬指点QAQ)
 
  所以$count(X) = \frac{1}{2^m}\sum\limits_{T \subseteq 2^U} f_T * (-1)^{T \cap X} = \frac{1}{2^m} * \hat{f_X}$
  于是我们只要先算出$f$,然后通过 FWT 算出所有 count(X) 就好了。
  时间复杂度为$O(n2^m + k2^k)$

代码如下

2019 牛客多校第一场 D Parity of Tuples的更多相关文章

  1. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  2. 2019牛客多校第一场E ABBA(DP)题解

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 ABBA 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语 ...

  3. 2019牛客多校第一场A-Equivalent Prefixes

    Equivalent Prefixes 传送门 解题思路 先用单调栈求出两个序列中每一个数左边第一个小于自己的数的下标, 存入a[], b[].然后按照1~n的顺序循环,比较 a[i]和b[i]是否相 ...

  4. 2019牛客多校第一场 A.Equivalent Prefixes

    题目描述 Two arrays u and v each with m distinct elements are called equivalent if and only if RMQ(u,l,r ...

  5. 2019牛客多校第一场 E-ABBA(dp)

    ABBA 题目传送门 解题思路 用dp[i][j]来表示前i+j个字符中,有i个A和j个B的合法情况个数.我们可以让前n个A作为AB的A,因为如果我们用后面的A作为AB的A,我们一定也可以让前面的A对 ...

  6. 【2019牛客多校第一场】XOR

    题意: 给你一个集合A,里边有n个正整数,对于所有A的.满足集合内元素异或和为0的子集S,问你∑|S| n<=1e5,元素<=1e18 首先可以转化问题,不求∑|S|,而是求每个元素属于子 ...

  7. 2019 牛客多校第一场 B Integration

    题目链接:https://ac.nowcoder.com/acm/contest/881/B 题目大意 给定 n 个不同的正整数 ai,求$\frac{1}{\pi}\int_{0}^{\infty} ...

  8. 2019牛客多校第一场E ABBA 贪心 + DP

    题意:问有多少个有(n + m)个A和(n + m)个B的字符串可以凑出n个AB和m个BA. 思路:首先贪心的发现,如果从前往后扫,遇到了一个A,优先把它看成AB的A,B同理.这个贪心策略用邻项交换很 ...

  9. 2019 牛客多校第一场 F Random Point in Triangle

    题目链接:https://ac.nowcoder.com/acm/contest/881/F 题目大意 给定二维平面上 3 个整数表示的点 A,B,C,在三角形 ABC 内随机选一点 P,求期望$E ...

随机推荐

  1. Python的从头再来

    虽然各种视频,文档看了不少.但是都没有系统的总结.现在要把Python从最基础开始总结,回归.也当作自己的复习.

  2. ASP.NET Core学习——4

    静态文件 静态文件(static files),例如HTML.CSS.图片和JavaScript之类的资源会被ASP.NET Core应用直接提供给客户端. 静态文件通常位于web root(< ...

  3. 2017 ICPC Asia Urumqi A.coins (概率DP + 期望)

    题目链接:Coins Description Alice and Bob are playing a simple game. They line up a row of nn identical c ...

  4. python 出现indentationError:expected an indented block!

    出现这个问题,代码一般是没问题的,剩下你要考虑: 1. 缩进对齐是否有问题 2. python脚本的格式是啥,如果你在linux上运行,编码需要是unix;  (大部分情况下,我们是在windows下 ...

  5. 剑指offer——03二维数组中的查找

    题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...

  6. 注册页面-使用form模块搭建

    基于Django的form模块,快速的搭建注册页面,每个限制条件,都放在form模块里面,不单独对每一项编写标签,使用模版的 for 循环来渲染. 首先设置form模块 在blogs模块下创建一个bl ...

  7. touchWX使用 echarts

    <button bindtap="init" wx:if="{{!isLoaded}}">加载图表</button> <butto ...

  8. 找到最大或者最小的N个元素

    heapq模块中的两个函数nlargest()和nsmallest() import heapq nums = [1,5,6,458,6,787,5,45,6] print(heapq.nlarges ...

  9. Operator '?:' has lower precedence than '*'; '*' will be evaluated first

    1.项目中用宏的时候,遇到如下警告 Operator '?:' has lower precedence than '*'; '*' will be evaluated first 2.错误原因 *操 ...

  10. 上线出现[x86_64, i386]

    echo "Target architectures: $ARCHS" APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}&quo ...