luogu P3773 [CTSC2017]吉夫特
这里的组合数显然要用\(\text{lucas}\)定理来求,所以考虑\(\text{lucas}\)定理的本质,即把\(n,m\)分别拆分成\(p\)进制串\(\{a\}\{b\}\),然后\(\binom{n}{m}\mod p=\prod_i \binom{a_i}{b_i}\mod p\)
这题里\(p=2\),那么最后的\(\binom{n}{m}\)要为\(1\),当且仅当\(m\)的二进制串每一位\(\le n\)二进制串的对应位,这相当于\(n\ \&\)(按位与)\(\ m=m\),这是因为\(\prod_i \binom{a_i}{b_i}\)中,所有\(\binom{a_i}{b_i}\)都要是\(1\),那么如果\(\exists i\ a_i=0,b_i=1\),就会导致\(\binom{a_i}{b_i}=\binom{0}{1}=0\),那么最终的值就是\(0\),所以\(m\)二进制每一位都要\(\le n\)的每一位.要求的实际上是长度\(\ge2\)的子序列\(\{s_1,s_2...s_k\}\),满足\(\forall i\in[1,k-1] s_i\&s_{i+1}=s_{i+1}\),所以可以倒着扫一遍序列,然后对于当前数记\(f_x\)为子序列最后一项的值为\(x\)的方案,转移枚举\(x\)的子集转移
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db long double
using namespace std;
const int N=270000+10,mod=1000000007;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,a[N],f[N],ans;
void ad(int &x,int y){x+=y,x-=x>=mod?mod:0;}
int main()
{
n=rd();
for(int i=1;i<=n;++i) a[i]=rd();
for(int i=n;i;--i)
{
for(int j=a[i];j;j=(j-1)&a[i]) ad(f[a[i]],f[j]);
ad(ans,f[a[i]]);
ad(f[a[i]],1);
}
printf("%d\n",ans);
return 0;
}
luogu P3773 [CTSC2017]吉夫特的更多相关文章
- 洛谷P3773 [CTSC2017]吉夫特(Lucas定理,dp)
题意 满足$b_1 < b_2 < \dots < b_k$且$a_{b_1} \geqslant a_{b_2} \geqslant \dots \geqslant a_{b_k} ...
- P3773 [CTSC2017]吉夫特
传送门 看到组合数在模 $2$ 意义下的乘积,考虑用 $lucas$ 定理把组合数拆开 $lucas$ 告诉我们,$C(n,m)$ 在模 $k$ 意义下的值,相当于 $n,m$ 在 $k$ 进制下每一 ...
- 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\) ...
- [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 ...
- 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^ ...
随机推荐
- Android5.0以下drawable tag vector错误的解决办法(转发)
Android5.0以下drawable tag vector错误的解决办法 在Androi 5.0以下的设备可能会报这样的错误: Caused by: org.xmlpull.v1.XmlPullP ...
- 手把手教你实现RecyclerView的下拉刷新和上拉加载更多
手把手教你实现RecyclerView的下拉刷新和上拉加载更多 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https:// ...
- opencv_traincascade级联训练人脸数据
正负样本格式: 正样本 灰度化 24*24 2000张 负样本 灰度化 50*50 1000张 训练过程 第一步:dir /b >pos.txt 以及dir /b >neg.txt ...
- Qt编写数据可视化大屏界面电子看板4-布局另存
一.前言 布局另存是数据可视化大屏界面电子看板系统中的额外功能之一,主要用于有时候用户需要在现有布局上做个微调,然后直接将该布局另存为一个布局配置文件使用,可以省略重新新建布局重新来一次大的调整的工作 ...
- 修改IDEAL 快捷键风格
选择File------Setting-----进入到设置窗口-------keymap--------选择自己适应的快捷键风格 选择Eclipse后Ideal的快捷键就和Eclipse相同
- MATLAB常用快捷键总结
MATLAB 命令栏显示处理的常用命令 清屏:clc 紧凑显示格式:format compact 宽松显示格式:format loose 数据高精度显示:format longG 数据低精度显示:fo ...
- 关于运维之故障复盘篇-Case Study
关于故障的事后复盘,英文名 Case Study是非常有必要做的,当然是根据故障的级别,不可能做到每个故障都Case Study,除非人员和时间充足: 文档能力也是能力的一种,一般工程师的文档能力比较 ...
- BSD process name correspondlng to current thread: knernel_task Mac OS version Not yet set
网上查了一大堆,没有一个靠谱的, 百度,以说黑苹果装系统最容易出现这个,这个让我开始怀疑公司给我们的所谓外观的iMac是黑苹果了,因为一直很卡,比上家公司的真黑苹果还卡. 谷歌,有说重置BIOS电池的 ...
- ASP.NET关于UEditor简单配置和错误修正
UEditor配置版本为:ueditor1_3_6-utf8-net,放置目录为:/UEditor 一./UEditor/ueditor.config.js文件需要设置: 1.URL修改为:var U ...
- JavaScript中new运算符的实现
废话不多说直接进入正题,首先我们需要先知道new运算符到底做了哪些事情,再来模拟它实现这一功能. 1. 建立一个空的Object对象: 2. 把这个空对象用__proto__链接到原型 3. 用app ...