【CF850E】Random Elections FWT
【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的更多相关文章
- 【CF850E】Random Elections(FWT)
[CF850E]Random Elections(FWT) 题面 洛谷 CF 题解 看懂题就是一眼题了... 显然三个人是等价的,所以只需要考虑一个人赢了另外两个人就好了. 那么在赢另外两个人的过程中 ...
- 【CSU1911】Card Game(FWT)
[CSU1911]Card Game(FWT) 题面 vjudge 题目大意: 给定两个含有\(n\)个数的数组 每次询问一个数\(x\),回答在每个数组中各选一个数,或起来之后的结果恰好为\(x\) ...
- 【题解】毒蛇越狱(FWT+容斥)
[题解]毒蛇越狱(FWT+容斥) 问了一下大家咋做也没听懂,按兵不动没去看题解,虽然已经晓得复杂度了....最后感觉也不难 用FWT_OR和FWT_AND做一半分别求出超集和和子集和,然后 枚举问号是 ...
- 【CF772D】Varying Kibibits FWT
[CF772D]Varying Kibibits 题意:定义函数f(a,b,c...)表示将a,b,c..的10进制下的每一位拆开,分别取最小值组成的数.如f(123,321)=121,f(530, ...
- 【XSY2753】Lcm 分治 FWT FFT 容斥
题目描述 给你\(n,k\),要你选一些互不相同的正整数,满足这些数的\(lcm\)为\(n\),且这些数的和为\(k\)的倍数. 求选择的方案数.对\(232792561\)取模. \(n\leq ...
- ZH奶酪:【Python】random模块
Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下:random.random() 用于生成一个0到1的随机浮点数.如: import random ra ...
- 【bzoj4589】Hard Nim FWT+快速幂
题目大意:给你$n$个不大于$m$的质数,求有多少种方案,使得这$n$个数的异或和为$0$.其中,$n≤10^9,m≤10^5$. 考虑正常地dp,我们用$f[i][j]$表示前$i$个数的异或和为$ ...
- 【learning】快速沃尔什变换FWT
问题描述 已知\(A(x)\)和\(B(x)\),\(C[i]=\sum\limits_{j\otimes k=i}A[j]*B[k]\),求\(C\) 其中\(\otimes\)是三种位运算的其中一 ...
- 【bzoj4589】Hard Nim FWT
题目描述 Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1. Claris和NanoApe两个人轮流拿石子,Claris先拿. 2. 每次只能从一堆中取若干个,可将一堆全取走, ...
随机推荐
- 详解ABBYY FineReader 12扫描亮度设置
很多刚接触ABBYY FineReader 12的小伙伴可能出现过这样一个问题:在扫描过程中会显示一条消息以提示更改亮度设置.这是因为你 FineReader扫描设置中亮度未正确设置.下面小编就给小伙 ...
- golang interface的使用和实现(翻译整理)
https://blog.csdn.net/u011409801/article/details/79291221
- [Converge] Backpropagation Algorithm
Ref: CS231n Winter 2016: Lecture 4: Backpropagation Ref: How to implement a NN:中文翻译版本 Ref: Jacobian矩 ...
- MySQL Study之--MySQL普通用户无法本地登陆
MySQL Study之--MySQL普通用户无法本地登陆 在安装完毕MySQL后,我们通常加入拥有对应权限的普通用户用来訪问数据库.在使用用户本地登录数据库的时候,常常会出现怎么登录也无 ...
- 在Visual Stdio 2012中编译执行JM18.6的方法
JM是H.264编码的官方实现,与X264开源实现相比,JM的实现比較完整,代码更加规范.并且同一时候提供了编码和解码过程.便于对照分析.可是JM的最大缺点是效率比X264低.因此.非常多应用都基于X ...
- LabelTTF 设置字体时的问题
使用cc.LabelTTF:create(txt, fontname, fontsize); 字体没能显示出来, 这里使用的是系统字体, 比如我使用"微软雅黑", 作为font ...
- zabbix添加对tomcat线程池的监控
在zabbix模板中添加以下监控项: 可以参考文档:http://www.fblinux.com/?p=616
- iOS开发-VFL初窥
VFL是苹果为了简化Autolayout的编码而推出的抽象语言,在上一篇博客中我们发现如果使用NSLayoutConstraint来添加约束是非常繁琐的. 一个简单的Frame需要添加四个NSLayo ...
- Django 访问数据库
通过命令行方式访问数据库: [root@localhost web]$ python manage.py shell # 进入交互模式(先安装ipython) In [1]: from blog.mo ...
- HTML 注释
"<!-- xxx -->" 用于在 HTML 中插入注释,注释是用来给开发人员看的,浏览器不会显示注释内容 <!DOCTYPE HTML> <htm ...