题目链接: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. Vlan的相关知识点收纳

    Q.思科Vlan的上限个数是多少? VLAN的范围:根据平台和软件版本不同,Cisco交换机最多支持4096个VLAN.VLAN号共有4096个,0-4095    0,4095:这两个号保留,仅限系 ...

  2. jenkins的api操作

    jenkins-client 实现方式 jenkins-client 底层是使用 HttpClient HttpPost 发送post 请求实现的,是将 REST API 封装了一下 添加依赖 < ...

  3. 一文看懂SATA和NVMe固态硬盘用起来有何区别?

    本文摘自:https://www.sohu.com/a/203688929_615464 NVMe固态硬盘正在逐步扩张,而包括三星.东芝在内的大厂并没有停止SATA固态硬盘新品的研发.到底那种固态硬盘 ...

  4. Lambda表达式底层分析

    一.我们先看下C#代码下Lamdba表达式的写法 // <summary> /// 写入日志委托 /// </summary> /// <param name=" ...

  5. Android高级架构进阶之数据传输与序列化

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述数据传输与序列化: [Serializable原理] ...

  6. java-day18

    函数式接口在java中指:有且仅有一个抽象方法的接口 @FunctionalInterface注解:可以检测接口是否是一个函数式接口 函数式接口的使用:一般可以作为方法的参数和返回值类型 自定义函数式 ...

  7. python--常用模块:collections 、time、random

      一.collections 模块 1:nametuple 生成可以用名字访问内容的元祖 from collections import namedtuple point=namedtuple('p ...

  8. Java中equals和hashcode的区别?

    Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用 ...

  9. extern static和函数

    #include <stdio.h> int sum(int a, int b); int main() { /************************************** ...

  10. Android基础——框架模式MVC在安卓中的实践

    本篇文章包含以下内容: MVC的介绍 MVC的实践 MVC的介绍 MVC (Model View Controller),是模型(model)视图(view)控制器(controller)的缩写,一种 ...