【CF850E】Random Elections

题意:有n位选民和3位预选者A,B,C,每个选民的投票方案可能是ABC,ACB,BAC...,即一个A,B,C的排列。现在进行三次比较,A-B,B-C,C-A。每次比较的结果由一个给定的函数决定$f(x):{0,1}^n\rightarrow {0,1}$,即读入一个长度为n的bool数组,返回一个bool变量。假如是A和B比较,则读入数组的第i个bool是 第i个人的排列中,A是否在B的前面;返回的bool是 A获胜还是B获胜。现在给你函数f(一张包含2^n个bool的表),所有选民的方案都是随机的,问你有多少种方案使得 存在一个预选者获得2场胜利。

如果嫌我说的太不清楚还是看原题吧~

题解:假设A赢了两场,那么我们设两次比较时的bool数组为$A-B:P_1$和$A-C:P_2$,考虑第i个人:

如果在$P_1$中这个人是0,在$P_2$中这个人是0,那么这个人可能的投票方案为CBA,BCA
同理得到:
(0,0)->CBA,BCA
(0,1)->BAC
(1,0)->CAB
(1,1)->ABC,ACB
所以说,如果$P_1\ \mathrm{xor}\ P_2$中有cnt个1,那么投票方案就是$2^{n-cnt}$。

也就是说我们把f数组和自身做一下异或卷积,然后把每一个数的值$\times 2^{n-cnt}$加到一起即可。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll P=1000000007;
const int maxn=(1<<20)+4;
int n,l;
ll ans;
int cnt[maxn];
ll a[maxn];
char str[maxn];
inline void fwt()
{
int h,i,j;
ll x,y;
for(h=2;h<=l;h<<=1) for(i=0;i<l;i+=h) for(j=i;j<i+h/2;j++) x=a[j],y=a[j+h/2],a[j]=x+y,a[j+h/2]=x-y;
}
inline void ufwt()
{
int h,i,j;
ll x,y;
for(h=2;h<=l;h<<=1) for(i=0;i<l;i+=h) for(j=i;j<i+h/2;j++) x=a[j],y=a[j+h/2],a[j]=(x+y)/2,a[j+h/2]=(x-y)/2;
}
int main()
{
scanf("%d",&n),l=1<<n;
int i;
scanf("%s",str);
for(i=0;i<l;i++) a[i]=str[i]-'0';
fwt();
for(i=0;i<l;i++) a[i]=a[i]*a[i];
ufwt();
ans=a[0]*l%P;
for(i=1;i<l;i++) cnt[i]=cnt[i-(i&-i)]+1,ans=(ans+a[i]*(1<<(n-cnt[i])))%P;
printf("%lld",ans*3%P);
return 0;
}

【CF850E】Random Elections FWT的更多相关文章

  1. 【CF850E】Random Elections(FWT)

    [CF850E]Random Elections(FWT) 题面 洛谷 CF 题解 看懂题就是一眼题了... 显然三个人是等价的,所以只需要考虑一个人赢了另外两个人就好了. 那么在赢另外两个人的过程中 ...

  2. 【CSU1911】Card Game(FWT)

    [CSU1911]Card Game(FWT) 题面 vjudge 题目大意: 给定两个含有\(n\)个数的数组 每次询问一个数\(x\),回答在每个数组中各选一个数,或起来之后的结果恰好为\(x\) ...

  3. 【题解】毒蛇越狱(FWT+容斥)

    [题解]毒蛇越狱(FWT+容斥) 问了一下大家咋做也没听懂,按兵不动没去看题解,虽然已经晓得复杂度了....最后感觉也不难 用FWT_OR和FWT_AND做一半分别求出超集和和子集和,然后 枚举问号是 ...

  4. 【CF772D】Varying Kibibits FWT

    [CF772D]Varying Kibibits 题意:定义函数f(a,b,c...)表示将a,b,c..的10进制下的每一位拆开,分别取最小值组成的数.如f(123,321)=121,f(530,  ...

  5. 【XSY2753】Lcm 分治 FWT FFT 容斥

    题目描述 给你\(n,k\),要你选一些互不相同的正整数,满足这些数的\(lcm\)为\(n\),且这些数的和为\(k\)的倍数. 求选择的方案数.对\(232792561\)取模. \(n\leq ...

  6. ZH奶酪:【Python】random模块

    Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下:random.random() 用于生成一个0到1的随机浮点数.如: import random ra ...

  7. 【bzoj4589】Hard Nim FWT+快速幂

    题目大意:给你$n$个不大于$m$的质数,求有多少种方案,使得这$n$个数的异或和为$0$.其中,$n≤10^9,m≤10^5$. 考虑正常地dp,我们用$f[i][j]$表示前$i$个数的异或和为$ ...

  8. 【learning】快速沃尔什变换FWT

    问题描述 已知\(A(x)\)和\(B(x)\),\(C[i]=\sum\limits_{j\otimes k=i}A[j]*B[k]\),求\(C\) 其中\(\otimes\)是三种位运算的其中一 ...

  9. 【bzoj4589】Hard Nim FWT

    题目描述 Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1. Claris和NanoApe两个人轮流拿石子,Claris先拿. 2. 每次只能从一堆中取若干个,可将一堆全取走, ...

随机推荐

  1. webService(SOAP)性能测试脚本

    本文以天气预报的webService为基础进行学习   webService地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx ...

  2. 有关maven不能加载ojdbc14.jar解决方法

    首先下载ojdbc14-10.2.0.4.0.jar这个包,然后在cmd下输入以下 mvn install:install-file -DgroupId=com.oracle -DartifactId ...

  3. The difference between the request time and the current time is too large.阿里云oss上传图片报错

    The difference between the request time and the current time is too large. 阿里云oss上传图片的时候报错如上, 解决办法,把 ...

  4. java中*和**的作用

    “*”就表示了所有的文件,但是“*”并不包括子目录下的文件: “**”匹配包含任意级子目录中所有的文件

  5. SQL Compare数据库比较工具 完全破解+使用教程

    来源http://www.cnblogs.com/duci/articles/4482665.html 一.使用教程 SQL Compare是编程人员常用的比较两个数据库之间差异的工具.可以用来比较数 ...

  6. Java -- 异常的捕获及处理 -- 范例 -- throw与throws的应用

    7.2.3 范例 -- throw与throws的应用 例:综合应用 Class : Math package limeThrowable._7_2_3; public class Math { pu ...

  7. 5 -- Hibernate的基本用法 --2 2 Hibernate的数据库操作

    在所有的ORM框架中有一个非常重要的媒介 : PO(持久化对象:Persistent Object).持久化对象的作用是完成持久化操作,简单地说,通过该对象可对数据执行增.删.改的操作 ------ ...

  8. hbase2.0.0-安装部署

    依赖hadoop 环境,我这边的版本是hadoop-2.6.5 选择hbase2.0.0版本的时候,去官网查看支持的hadoop版本 1.伪分布式安装 下载:http://mirror.bit.edu ...

  9. SaltStack 批量安装软件

    这里我们用 SaltStack 服务端对多台客户端远程批量安装 httpd,步骤如下: [root@localhost ~]$ vim /etc/salt/master # 编辑配置文件,打开base ...

  10. php-fpm 记录慢执行日志

    有时候我们访问一个 php 的网站很慢,要想知道慢的原因,需要配置 php-fpm.conf,记录执行慢的日志: [root@localhost ~]$ cat /usr/local/php/etc/ ...