D. Jzzhu and Numbers

这就是这个题目的意思,真的感觉这个思想是太神奇了,我这种菜逼现在绝壁想不到这样的证明的过程的,还有就是这个题的推道过程,以下思路纯属借鉴卿学姐的,还是自己太菜了,,,,
讲道理这种问题我真的想不到用容斥原理来做啊,那现在我就用容斥原理来讲一下这个问题,,,
|!A1∩!A2∩!A3∩....!An|=sum-奇数的组合+偶数的组合。。。。
!A1代表的就第一个位置为0的方案,同理其他的以此类推。。。
我们知道要是一个数x&i=i; 那么x和i有可能的关系就是x>=i 就是i有一的位置x的位置是肯定有1的。。
经过我今天早上的疯狂的找原题,今天终于在codeforce找到了原题,要是一共有20位的话,总共的所有的情况就是2^20-1 ,这个子的话我们只要算出来
aj&i=i有多少种数据就行了,这样子的话我们再统计i中的1的个数,这样子的话我们就能用dp来做这个问题了,我们用dp[i][k]代表前i位有可能和k不同的&k=k的数量,所以当第i为为0的时候那么 dp[i][k]+=dp[i-1][k]+dp[i-1][k+2^i];
那么当第i位为1的时候,dp[i][k]+=dp[i-1][k],那么就是代表第i为必定相同,然后再根据容斥原理的定义这个题到此已经完成。。。
泣不成声啊! 妈的竟然过了。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1000000007;
const int N=1e6+5;
ll dp[22][1000003];
ll g[N];
int a[N];
int s[N];
void inist(int n)
{
g[0]=1;
for(int i=1;i<=n;i++)
{
g[i]=2*g[i-1];
g[i]%=mod;
dp[0][a[i]]++;
}
}
void work(int k,int n)
{
// 一共k-1位
for(int i=1;i<k;i++)
{
for(int j=1;j<=1000000;j++)
{
if(j&(1<<(i-1)))
{
dp[i][j]=dp[i-1][j];
s[j]^=1;
}
else
{
dp[i][j]=dp[i-1][j];
if((j|(1<<(i-1)))>1e6) continue;
dp[i][j]+=dp[i-1][j|(1<<(i-1))];
}
} }
int num=k-1;
ll ans=(g[n]-1+mod)%mod;
for(int i=1;i<=1000001;i++)
{
if(s[i]==0) {ans=(ans+g[dp[20][i]]%mod)%mod; ans=(ans-1+mod)%mod;}
else {ans=(ans-g[dp[20][i]]%mod)%mod; ans=(ans+1+mod)%mod;}
}cout<<ans<<endl;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
inist(n);
work(21,n);
}
D. Jzzhu and Numbers的更多相关文章
- Codeforces Round #257 (Div. 1) D - Jzzhu and Numbers 容斥原理 + SOS dp
D - Jzzhu and Numbers 这个容斥没想出来... 我好菜啊.. f[ S ] 表示若干个数 & 的值 & S == S得 方案数, 然后用这个去容斥. 求f[ S ] ...
- Jzzhu and Numbers
Jzzhu and Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces 449D Jzzhu and Numbers
http://codeforces.com/problemset/problem/449/D 题意:给n个数,求and起来最后为0的集合方案数有多少 思路:考虑容斥,ans=(-1)^k*num(k) ...
- Codeforces.449D.Jzzhu and Numbers(容斥 高维前缀和)
题目链接 \(Description\) 给定\(n\)个正整数\(a_i\).求有多少个子序列\(a_{i_1},a_{i_2},...,a_{i_k}\),满足\(a_{i_1},a_{i_2}, ...
- Jzzhu and Numbers CodeForces - 449D (高维前缀和,容斥)
大意: 给定集合a, 求a的按位与和等于0的非空子集数. 首先由容斥可以得到 $ans = \sum \limits_{0\le x <2^{20}} (-1)^{\alpha} f_x$, 其 ...
- 【CF449D】Jzzhu and Numbers
题目 提供一个非容斥做法--\(FWT\) 我们发现我们要求的东西就是一个背包,只不过是在\(and\)意义下的 自然有 \[dp_{i,j}=\sum_{k\&a_i=j}dp_{i-1,k ...
- cf449D. Jzzhu and Numbers(容斥原理 高维前缀和)
题意 题目链接 给出\(n\)个数,问任意选几个数,它们\(\&\)起来等于\(0\)的方案数 Sol 正解居然是容斥原理Orz,然而本蒟蒻完全想不到.. 考虑每一种方案 答案=任意一种方案 ...
- Codeforces 449D Jzzhu and Numbers(高维前缀和)
[题目链接] http://codeforces.com/problemset/problem/449/D [题目大意] 给出一些数字,问其选出一些数字作or为0的方案数有多少 [题解] 题目等价于给 ...
- CF449D Jzzhu and Numbers
题解 刚刚学习了高维前缀和 这道题就肥肠简单了 高维前缀和其实原理肥肠简单 就是每次只考虑一维,然后只做这一维的前缀和 最后求出的就是总前缀和了 那么对于这道题 也就很简单了 发现选择的所有数每一位都 ...
随机推荐
- 设计模式笔记之二:Android开发中的MVP架构(转)
写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...
- make的参数
转载自 陈皓<跟我一起写 Makefile> 下面列举了所有GNU make 3.80版的参数定义.其它版本和产商的make大同小异,不过其它产商的make的具体参数还是请参考各自的产品文 ...
- PHP的高并发和大数据处理
收集前人的经验.加速学习,解决工作中的难题. 一.代码优化(包括sql语句的优化), 合理的使用索引,避免整表查询.二.日常海量数据处理我用文件缓存,文件缓存分两种,第一种是最常见的生成html静太文 ...
- 三 APPIUM Android自动化 测试初体验
1.创建一个maven项目 成功新建工程: 编辑pom.xml,在<dependencies></dependencies>下添加appium相关依赖: <depende ...
- grunt安装详解及失败处理
标签: 1.官网 nodejs官网 https://nodejs.org/en/ Grunt官网 http://gruntjs.com/ Grunt插件首页 http://gruntjs.com/p ...
- ubuntu16.04 安装搜狗输入法
刚刚升级ubuntu16.04LTS,安装搜狗输入法又出问题. 和以前一样,在官网下了deb包,直接双击安装,打开了Software Center(如下:改版过了,但是看起来是没有安装上的),点Ins ...
- 2.7. 属性的各种设置选项(Core Data 应用程序实践指南)
可供配置的选项根据属性类型的不同有所变化,并不是每一种属性都能配置下列选项 Transient:勾选该选项,表示该属性不写入“持久化存储区”,这听起来很奇怪,但有时候,只需要把特性留在托管对象上下文就 ...
- win10新特性,ubuntu子系统(安装及配置)
最新版win10下可以直接跑ubuntu镜像,直接入正题. 这里如果你没有可能是你的版本不是最新的,我这里是最新的win10直接是有这个功能的.勾选后会要求重启,确定即可. 然后win键弹出搜索,输入 ...
- js原生继承之——组合式继承实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- MySQL XtraBackup自动恢复脚本
#!/bin/sh ################## #author:rrhelei@126.com# ################## #xtrabackup2.1.8 # 使用方法: ...