【BZOJ4903/UOJ300】【CTSC2017】吉夫特
Description
传送门
简述题意:给一个序列,询问有多少子序列满足其中不会出现\(a\choose b\)是偶数的情况,其中\(a\)在\(b\)前面。
Solution
首先探究组合数的奇偶性问题。我们用Lucas定理展开组合数,可以发现一些有趣的性质:
\]
后一个括号的值可以直接算:\({0\choose 0}={1\choose 0}={1\choose 1}=1,\;\;{0\choose 1}=0\)。这相当于\(a\)和\(b\)的二进制最末位的某种计算。
而想象一下第一个括号递归计算的过程,实际上是移除了\(a\)和\(b\)的二进制最后一位继续计算。到底层时,其值必定是1。
所以决定总体奇偶的地方在于第二个括号会不会取0。也就是会不会出现\(a\)末位为0,\(b\)末位为1的情况。
这整一个过程的实质是什么?相当于比较\(a\)和\(b\)的每一位对应二进制。一旦出现\(a\)某一位为0,\(b\)对应位为1,则整体为偶数。否则整体为奇数。
再进一步考虑,这种条件,相当于判断\(b\)的1位集合是否是\(a\)的1位集合的子集,则整体奇数,否则整体偶数。
有趣的是,这种关系具有传递性:如果\(a\)包含\(b\),那么\(a\)包含以\(b\)开头的合法子序列的每个元素。问题变得非常简单,只需要考虑从哪一个子序列的开头转移:设\(f[a]\)表示以\(a\)为开头的子序列个数。枚举\(a\)的子集\(b\),如果\(b\)在\(a\)后面,则\(f[a]+=f[b]\)。
总时间复杂度为\(\mathcal O(3^{\log_2n})\)。
Code
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=211990,S=233335,MOD=1e9+7;
int n,a[N],p[S],f[S];
inline int plu(int x,int y){return (x+y)%MOD;}
inline void upd(int &x,int y){x=plu(x,y);}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",a+i);
int ans=-n;
for(int i=n;i>=1;i--){
f[a[i]]=1;
for(int j=(a[i]-1)&a[i];j;j=(j-1)&a[i])
upd(f[a[i]],f[j]);
upd(ans,f[a[i]]);
}
printf("%d\n",plu(ans,MOD));
return 0;
}
【BZOJ4903/UOJ300】【CTSC2017】吉夫特的更多相关文章
- BZOJ4903 UOJ300 CTSC2017 吉夫特 【Lucas定理】
BZOJ4903 UOJ300 CTSC2017 吉夫特 弱弱地放上题目链接 Lucas定理可以推一推,发现C(n,m)是奇数的条件是n" role="presentation&q ...
- [UOJ300][CTSC2017]吉夫特
uoj bzoj luogu sol 根据\(Lucas\)定理,\(\binom nm \mod 2=\binom{n\%2}{m\%2}\times\binom{n/2}{m/2}\mod 2\) ...
- bzoj4903 & loj2264 [Ctsc2017]吉夫特 Lucas 定理+状压DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4903 https://loj.ac/problem/2264 http://uoj.ac/pr ...
- 【bzoj4903/uoj300】[CTSC2017]吉夫特 数论+状压dp
题目描述 给出一个长度为 $n$ 的序列,求所有长度大于等于2的子序列个数,满足:对于子序列中任意两个相邻的数 $a$ 和 $b$ ($a$ 在 $b$ 前面),${a\choose b}\mod 2 ...
- bzoj千题计划247:bzoj4903: [Ctsc2017]吉夫特
http://uoj.ac/problem/300 预备知识: C(n,m)是奇数的充要条件是 n&m==m 由卢卡斯定理可以推出 选出的任意相邻两个数a,b 的组合数计算C(a,b)必须是奇 ...
- BZOJ4903: [Ctsc2017]吉夫特
传送门 可以发现,\(\binom{n}{m}\equiv 1(mod~2)\) 当且仅当 \(m~and~n~=~m\) 即 \(m\) 二进制下为 \(n\) 的子集 那么可以直接写一个 \(3^ ...
- [CTSC2017]吉夫特
Description: 给定一个序列\(a_1,a_2,a_3...a_n\) 求有多少个不上升子序列: \(a_{b1},a_{b_2}...\) 满足 \(C_{a_{b1}}^{a_{b2}} ...
- BZOJ.4903.[CTSC2017]吉夫特(Lucas DP)
题目链接 首先\(C(n,m)\)为奇数当且仅当\(n\&m=m\). 简要证明: 因为是\(mod\ 2\),考虑Lucas定理. 在\(mod\ 2\)的情况下\(C(n,m)\)最后只会 ...
- uoj 300 [CTSC2017]吉夫特 - Lucas - 分块 - 动态规划
题目传送门 戳此处转移 题目大意 给定一个长为$n$的序列,问它有多少个长度大于等于2的子序列$b_{1}, b_{2}, \cdots, b_{k}$满足$\prod_{i = 2}^{k}C_{b ...
随机推荐
- 基于C#的机器学习--贝叶斯定理-执行数据分析解决肇事逃逸之谜
贝叶斯定理-执行数据分析解决肇事逃逸之谜 在这一章中,我们将: 应用著名的贝叶斯定理来解决计算机科学中的一个非常著名的问题. 向您展示如何使用贝叶斯定理和朴素贝叶斯来绘制数据,从真值表中发现异常值 ...
- 王者荣耀交流协会互评Beta版本及答复功能改进建议、Bug修正
互评Beta版本 欢迎来怼团队博客园安卓APP Thunder团队爱阅app 探路者团队贪吃蛇 Hello World!团队项目空天猎 答复功能改进建议 答复其他各组给出的“就现有技术和工作量,不改变 ...
- Daily Scrum 11.14
姓名 今日任务 黄新越 按照热度排序->产生柱状图 刘垚鹏 总体代码架构整合 王骜 总体代码架构整合 林旭鹏 优化整体UI布局 安康 优化整体UI布局 黄伟龙 预先合作编写测试用例 马佐霖 预先 ...
- Daily Scrum7 11.11
今日任务: 徐钧鸿:结束了SQL和Affairs的移植,修改了连接池,学习C#和java的正则表达式并且完成相关的移植 张艺:个人阅读作业 黄可嵩:完成高亮显示的移植,进一步移植搜索代码 徐方宇:继续 ...
- jsp九大内置对象之config 和 out
jsp中config的作用是读取web.xml中的配置信息,一般在后台获取初始化的参数,jsp页面用的较少因为jsp属于表现层,一般是获取数据. jsp中的out对象是将内容放到缓冲区中然后显示出来
- 使用Axure RP设计Android界面原型
转至@徐州瑞步科技(http://www.cnblogs.com/brooks-dotnet/archive/2013/06/05/3119923.html) 资源地址:http://pan.baid ...
- 作业6 团队项目之需求 (NABCD模型)
N A B C D模型分析 WorkGroup:NewApps 组员:欧其锋(201306114305 http://www.cnblogs.com/ouqifeng/) 吕日荣(20130611 ...
- 微信小程序之Flex布局
微信小程序页面布局方式采用的是Flex布局.Flex布局,是W3c在2009年提出的一种新的方案,可以简便,完整,响应式的实现各种页面布局.Flex布局提供了元素在容器中的对齐,方向以及顺序,甚至他们 ...
- Java网络编程一:基础知识详解
网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层 ------------ ...
- Scrum 项目准备5.0
1.团队成员完成自己认领的任务. 2.燃尽图:理解.设计并画出本次Sprint的燃尽图的理想线.参考图6. 3.每日立会更新任务板上任务完成情况.燃尽图的实际线,分析项目进度是否在正轨. 每天的 ...