题目传送门

题目大意

没法描述,过于繁杂。

思路

果然自己是个菜鸡,只能靠读题解读题,难受极了,其实不是很难自己应该做得出来的。。。。哎。。。。

不难发现可以统计 \(A\) 获胜的情况乘上 \(3\) 就是总答案。然后 \(A\) 获胜的情况其实就是满足 \(f(S1)=f(S2)=1\) 乘上满足是 \(S1S2\) 的方案数。然后看后面那个东西,你发现对于人 \(i\) 如果 \(S1_i=1\wedge S2_i=1\) 的话有 \(2\) 中情况,就是 \(\text{BCA,CBA}\) ,如果 \(S1_i=0\wedge S2_i=1\) 的话有 \(1\) 种情况,就是 \(\text{BAC}\) ,另外两种类似。然后你就发现如果 \(S1_i=S2_i\) 贡献就是 \(2\) ,反之为 \(1\) 。

整理一下,发现答案其实就是:

\[\sum_{S1}\sum_{S2}2^{n-\text{pop-count}(S1\oplus S2)}f(S1)f(S2)
\]

然后你就发现这个东西可以使用 \(\texttt{FWT}\) 进行优化。时间复杂度就变为了 \(\Theta(2^n n)\) 。

\(\texttt{Code}\)

#include <bits/stdc++.h>
using namespace std; #define Int register int
#define mod 1000000007
#define MAXN 1048576 int n,g[MAXN],pw[25],cnt[MAXN]; void FWT (int *f,int type){
for (Int i = 1;i < n;i <<= 1)
for (Int j = 0;j < n;j += i << 1)
for (Int k = 0;k < i;++ k){
int x = f[j + k],y = f[i + j + k];
f[j + k] = 1ll * type * (x + y) % mod,
f[i + j + k] = 1ll * type * (x + mod - y) % mod;
}
} template <typename T> inline void read (T &t){t = 0;char c = getchar();int f = 1;while (c < '0' || c > '9'){if (c == '-') f = -f;c = getchar();}while (c >= '0' && c <= '9'){t = (t << 3) + (t << 1) + c - '0';c = getchar();} t *= f;}
template <typename T,typename ... Args> inline void read (T &t,Args&... args){read (t);read (args...);}
template <typename T> inline void write (T x){if (x < 0){x = -x;putchar ('-');}if (x > 9) write (x / 10);putchar (x % 10 + '0');} signed main(){
read (n);
pw[n] = 1;for (Int i = n - 1;~i;-- i) pw[i] = pw[i + 1] * 2;n = 1 << n;
for (Int i = 0;i < n;++ i) scanf ("%1d",&g[i]),cnt[i] = cnt[i >> 1] + (i & 1);
FWT (g,1);for (Int i = 0;i < n;++ i) g[i] = 1ll * g[i] * g[i] % mod;FWT (g,(mod + 1) >> 1);
int ans = 0;for (Int i = 0;i < n;++ i) ans = (ans + 1ll * g[i] * pw[cnt[i]] % mod) % mod;
write (ans * 3ll % mod),putchar ('\n');
return 0;
}

CF850E Random Elections 题解的更多相关文章

  1. CF850E Random Elections

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

  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. CF1043A Elections 题解

    Content 有两个人参加选举,其中已知 \(n\) 位选民投给第二个人的票数为 \(a_1,a_2,a_3,...,a_n\).第一个人很想赢,所以想通过调整每位选民只能投的票数 \(k\) 来让 ...

  5. [Codeforces]850E - Random Elections

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

  6. codeforces850E Random Elections

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

  7. CF850 E. Random Elections

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

  8. CF570A Elections 题解

    Content 有 \(n\) 个候选人和 \(m\) 个城市,每个城市可以给每个候选人投票,已知第 \(i\) 个城市给第 \(j\) 个人投的选票数是 \(a_{i,j}\).我们将第 \(i\) ...

  9. [Leetcode Week17]Copy List with Random Pointer

    Copy List with Random Pointer 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/copy-list-with-random- ...

随机推荐

  1. Ubuntu中配置tomcat

    1.从网上下载的tomcat配置失败后,servername那一栏写不了,必须要删除工作空间的配置文件 sudo rm /home/{username}/workspace/.metadata/.pl ...

  2. 剖析虚幻渲染体系(11)- RDG

    目录 11.1 本篇概述 11.2 RDG基础 11.2.1 RDG基础类型 11.2.2 RDG资源 11.2.3 RDG Pass 11.2.4 FRDGBuilder 11.3 RDG机制 11 ...

  3. MySQL的主从复制步骤详解及常见错误解决方法

    mysql主从复制(replication同步)现在企业用的比较多,也很成熟.它有以下优点: 1.降低主服务器压力,可在从库上执行查询工作. 2.在从库上进行备份,避免影响主服务器服务. 3.当主库出 ...

  4. elsa core—3.elsa 服务

    在本快速入门中,我们将介绍一个用于设置Elsa Server的最小ASP.NET Core应用程序.我们还将安装一些更常用的activities(活动),如Timer.Cron和sendmail,以能 ...

  5. inotify与rsync实现实时同步记录文档

    目录 安装 配置 参考链接 安装 安装rsync yum -y install rsync 安装inotify-tools 这是一个实时监听文件变换的工具 wget -O /etc/yum.repos ...

  6. 【第四篇】-Git 工作区、暂存区和版本库之Spring Cloud直播商城 b2b2c电子商务技术总结

    Git 工作区.暂存区和版本库 基本概念 我们先来理解下 Git 工作区.暂存区和版本库概念: 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫 stage 或 index.一般存放在 .git  ...

  7. Dart简易教程 (1)---数据类型 运算符,类转换换

    从下面开始学习DART编程 以下是一个简单的示例: main(){ var number = 42; print(number);}程序说明,dart是一个强大的脚本类语言,可以不预先定义变量类型 , ...

  8. C语言中的符号重载

    摘自<C专家编程>第二章37页                     C语言中符号的重载 符号 意义 static 在函数内部,表示该变量的值在各个调用间一直保持延续性在函数这一级,表示 ...

  9. 关于php的ini文件相关操作函数浅析

    在小公司,特别是创业型公司,整个服务器的搭建一般也是我们 PHP 开发工程师的职责之一.其中,最主要的一项就是要配置好服务器的 php.ini 文件.一些参数会对服务器的性能产生深远的影响,而且也有些 ...

  10. seo优化刷百度指数方法

    站长朋友们都听过"刷指数"这个概念,并且一直以来都有站长刷指数的现象.大家或为了提升网站数据,或为了满足排名的虚荣心,或为了与竞争对手抗衡,都或多或少研究过刷指数的原理和工具. 那 ...