题意:一共有n个人,要在三个人中选prefer,一开始他们心中都会想好他们的排名(共6种),之后给出的判断不会矛盾。规则如下:一共有三轮,分别是a->b,b->c,c->a,每个人选1,表示prefer前者,选0表示prefer后者。这样形成一个n位的二进制x。定义函数f(x)={0,1}:1表示这一轮中前者赢,0表示后者赢。

有性质:f(x^((1<<n)-1))=1-f(x)。

现在给出f的对应值表,问其中一个人完胜(赢>=2局)的概率*6^n?n<=20。

标程:

 #include<bits/stdc++.h>
using namespace std;
const int mod=1e9+;
typedef long long ll;
const int N=;
int n;
ll ans,f[N],x[N];
void fwt()
{
for (int i=;i<n;i++)
for (int j=;j<(<<n);j++)
if (!(j&(<<i)))
{
ll l=f[j],r=f[j|(<<i)];
f[j]=l+r,f[j|(<<i)]=l-r;
}
}
int main()
{
scanf("%d",&n);char c=getchar();
while (c<''||c>'') c=getchar();
for (int i=;i<(<<n);i++) f[i]=c-'',c=getchar();
fwt();
for (int i=;i<(<<n);i++) f[i]=f[i]*f[i];
fwt();
for (int i=;i<(<<n);i++) f[i]=f[i]>>n;
x[]=;
for (int i=;i<(<<n);i++) x[i]=x[i>>]<<(i&);//递推求2^popcount(i)
for (int i=;i<(<<n);i++)
ans=((ll)ans+(ll)f[i]*x[i^((<<n)-)]%mod)%mod;
printf("%d\n",(ll)ans*%mod);
return ;
}

易错点:1.有一点地方少开ll了啊啊啊。低级错误。

题解:fwt

写fwt的时候用a[i^j]=sigma(b[i]*c[j])来理解比较容易。

举其中一个人来看,设有关其的两轮他都赢(以下称作A,B),即有一个0一个1的结果(与题目中国的顺序对应)。(最后方案数*3,有三个人)

不能让喜爱排名矛盾,那么我们可以在A,B轮中任意,由此第三轮一些位置固定,一些位置不固定l个,*2^l即可。

运用题目中给的性质,一个0一个1的结果不好处理,但可以与两个1的情况通过一次取反唯一对应。于是可以用fwt统计方案数。由于是按位异或,答案下标的二进制表示中有几个0,即是有几个数不固定。

CF850E Random Elections的更多相关文章

  1. CF850E Random Elections 题解

    题目传送门 题目大意 没法描述,过于繁杂. 思路 果然自己是个菜鸡,只能靠读题解读题,难受极了,其实不是很难自己应该做得出来的....哎.... 不难发现可以统计 \(A\) 获胜的情况乘上 \(3\ ...

  2. 【CF850E】Random Elections(FWT)

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

  3. 【CF850E】Random Elections FWT

    [CF850E]Random Elections 题意:有n位选民和3位预选者A,B,C,每个选民的投票方案可能是ABC,ACB,BAC...,即一个A,B,C的排列.现在进行三次比较,A-B,B-C ...

  4. [Codeforces]850E - Random Elections

    FWT裸题,写了下模板 #include<cstdio> #define ll long long #define r register int #define MN (1<< ...

  5. codeforces850E Random Elections

    题目链接:codeforces 850E 翻译:luogu 读题是第一要务(大选这么随便真的好吗) 其实答案问你的就是在所有选民心中支持的人的所有情况中,能让一个人连赢两场的情况数是多少 我们假设\( ...

  6. CF850 E. Random Elections

    题目传送门:CF 题目大意: 现有\(A,B,C\)三人参加竞选,有n个市民对其进行投票,每个市民心中对三人都有一个优先顺序(如市民\(i\)对三人的优先顺序为\(A-C-B\),则凡是有\(A\)的 ...

  7. Chrome V8引擎系列随笔 (1):Math.Random()函数概览

    先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...

  8. Math.random()

    Math.random() 日期时间函数(需要用变量调用):var b = new Date(); //获取当前时间b.getTime() //获取时间戳b.getFullYear() //获取年份b ...

  9. .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    .Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...

随机推荐

  1. C# WinfForm 控件之dev报表 XtraReport (七)报表合并

    这个不是太难,新建两个报表 一个form窗体 窗体上放个documentView  代码如下 XtraReport2 xr2 = new XtraReport2(); xr2.CreateDocume ...

  2. http://localhost:8080 is requesting your username and password

    after you startup your tomcat,  you type a concrete request url  in broswer, the tomcat probably wil ...

  3. canvas的基础入门

    canvas是定义在浏览器上的画布.它不仅仅是一个标签元素更是一个编程工具是一套编程的接口.利用它可以开发出很多东西,比如动画,游戏,动态的图表等富有变现力和感染力的应用.还可以开发出绚丽的3D动态效 ...

  4. 初识微服务框架ServiceComb

    https://blog.csdn.net/zengdongwen/article/details/93486257 后续跟进学习.

  5. easyui datagrid 绑定json对象属性的属性

    今天用easyui 的datagrid绑定数据时,后台提供的数据是实体类类型的,其中有一个实体类A的属性b是另一个实体类B类型的,而前台需要显示b的属性c,这下就悲剧了,前台没法直接绑定了,后来脑筋一 ...

  6. docker commit为什么不适合生成镜像?

    要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录与容器存储层里.而Docker提供了一个docker commit 的命令,可以将容器的存储层保存下来成为镜像.换句 ...

  7. const 命令

    const 命令声明一个只读的常量,声明后值不可以改变 const 变量不可以重复声明 const一旦声明变量,就必须立即初始化,不能留到以后赋值. const命令声明的常量也是不提升,同样存在暂时性 ...

  8. ES6 Sybol属性

    Symbol: 概念:ES6中的添加了一种原始数据类型symbol(已有的原始数据类型:String, Number, boolean, null, undefined, 对象) 特点: 1.Symb ...

  9. 使用Git 上传文件到云端(版本库)

    第一步:本地初始化Git版本库 git init 第二步:链接码云(云端) git remote add orgin "你的远程仓库地址"(复制链接后结尾是.git,如果没有记得加 ...

  10. 关于使用vue-router的嵌套路由的命名路由时踩的坑

    今天在做我的模仿微博项目时,我想实现点击router-link后,跳转到微博正文页面,并渲染其嵌套视图-评论组件.但是在实际实现时,我发现页面可以正常跳转,但是在页面加载后,并不渲染该页面的嵌套视图, ...