题目链接:codeforces 850E

翻译:luogu

读题是第一要务(大选这么随便真的好吗)

其实答案问你的就是在所有选民心中支持的人的所有情况中,能让一个人连赢两场的情况数是多少

我们假设\(A\)赢了\(B\)和\(C\),最后将答案\(\times 3\)即可

再记\(A\)赢\(B\)时的\(01\)串为\(S_1\),\(A\)赢\(C\)时的\(01\)串为\(S_2\),那么对于这两个串的第\(i\)位与该选民的支持情况的对应有如下\(4\)种情况

1)\((0,0)\),此时有两种可能\(BCA,CBA\)

2)\((0,1)\),只有一种情况\(BAC\)

3)\((1,0)\),\(CAB\)

4)\((1,1)\),\(ABC\)或\(ACB\)

这意味着对于\(S_1\)和\(S_2\)中相同的位上对答案有\(\times 2\)的贡献,记其不同的位为\(cnt\),则此时的答案为\(2^{n-cnt}\)

为什么记不同的呢?因为不同的数量我们可以直接\(xor\)搞一下

还要考虑\(A\)连胜两场呢?这不就对应着两次函数\(f\)的值的乘积为\(1\)吗

于是把题目中的\(f\)数组做一下\(xor\)卷积,每一位对答案的贡献就是\(2^{n-cnt_i}*p_i\)(\(p_i\)表示卷积之后的数组的值)

#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<queue>
#include<map>
using namespace std;
const int maxd=1000000007,N=100000,inv2=500000004;
const double pi=acos(-1.0);
typedef long long ll;
int n,cnt[1100000];
ll bin[1100000],a[1100000],b[1100000];
char s[1100000]; int read()
{
int x=0,f=1;char ch=getchar();
while ((ch<'0') || (ch>'9')) {if (ch=='-') f=-1;ch=getchar();}
while ((ch>='0') && (ch<='9')) {x=x*10+(ch-'0');ch=getchar();}
return x*f;
} void fwt(int lim,ll *a,int typ)
{
int mid;
for (mid=1;mid<lim;mid<<=1)
{
int len=(mid<<1),sta,j;
for (sta=0;sta<lim;sta+=len)
{
for (j=0;j<mid;j++)
{
int x=a[sta+j],y=a[sta+j+mid];
a[sta+j]=(x+y)%maxd;
a[sta+j+mid]=(x-y+maxd)%maxd;
if (typ==-1)
{a[sta+j]=(a[sta+j]*inv2)%maxd;a[sta+j+mid]=(a[sta+j+mid]*inv2)%maxd;}
}
}
}
} int main()
{
n=read();int lim=(1<<n),i;
scanf("%s",s);bin[0]=1;
for (i=0;i<lim;i++) {a[i]=s[i]-'0';b[i]=a[i];}
for (i=1;i<lim;i++) {bin[i]=(bin[i-1]<<1)%maxd;cnt[i]=cnt[i>>1]+(i&1);}
fwt(lim,a,1);fwt(lim,b,1);
for (i=0;i<lim;i++) a[i]=(a[i]*b[i])%maxd;
fwt(lim,a,-1);
ll ans=0;
for (i=0;i<lim;i++) ans=((a[i]*bin[n-cnt[i]])%maxd+ans)%maxd;
ans=(ans*3)%maxd;
printf("%lld",ans);
return 0;
}

codeforces850E Random Elections的更多相关文章

  1. 【CF850E】Random Elections(FWT)

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

  2. 【CF850E】Random Elections FWT

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

  3. [Codeforces]850E - Random Elections

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

  4. CF850 E. Random Elections

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

  5. CF850E Random Elections

    题意:一共有n个人,要在三个人中选prefer,一开始他们心中都会想好他们的排名(共6种),之后给出的判断不会矛盾.规则如下:一共有三轮,分别是a->b,b->c,c->a,每个人选 ...

  6. CF850E Random Elections 题解

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

  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. postgresql如何让主键自增

    法一: Sql代码 收藏代码 CREATE TABLE customers ( customerid SERIAL primary key , companyname character varyin ...

  2. 基于ElasticStack数据分析应用系统

    1.Elasticsearch Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自 ...

  3. MySql给表添加列和注释

    1.给表添加列 ALTER TABLE supplier_seller ADD COLUMN company_id INT NULL COMMENT '供应主体id'; 默认情况下,添加的列会添加到最 ...

  4. Java开发笔记(序)章节目录

    现将本博客的Java学习文章整理成以下笔记目录,方便查阅. 第一章 初识JavaJava开发笔记(一)第一个Java程序Java开发笔记(二)Java工程的帝国区划Java开发笔记(三)Java帝国的 ...

  5. vue-router 用户登陆

    有些路由页面需要用户登陆之后才能访问如(用户中心),如果用户没有登陆就访问这些页面的话就应该转换到登陆页面,登陆成功之后在进入该页面. 需要用到的知识点有:H5中的会话存储(sessionStorag ...

  6. 网页三剑客:HTML+CSS+JavaScript 之JavaScript

    JavaScript 简介 JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. JavaScrip ...

  7. Android为TV端助力之WebView开发踩坑一

    在Android清单配置文件里面 自定义application时,在4.4系统上面不能加上一个属性,见下图 否则界面将不会显示任何数据,在更高或者更低的系统上面没有测试!

  8. pythonmysql运行报错解决过程中遇到的其中一个报错解决文章来源

    本文章仅记录下面报错的解决文章来源:error: command 'C:\Users\Administrator\AppData\Local\Programs\Common\Micr osoft\Vi ...

  9. typescript的函数

    1:默认参数(传入值会覆盖默认参数,不传值也行) function getinfo(name:string,age:number=20):string{ return `${name}---${age ...

  10. Netty 核心内容之 编解码器

    原文链接 Netty 核心内容之 编解码器 代码仓库地址 编解码器 我认为Netty 最棒的一点就是Netty 设计的编解码链,这一优秀的设计,可以很方便的实现二进制流->ByteBuf-> ...