题目链接

loj300

题解

orz litble

膜完题解后,突然有一个简单的想法:

考虑到\(2\)是质数,考虑Lucas定理:

\[{n \choose m} = \prod_{i = 1} {\lfloor \frac{n}{2^{i - 1}} \rfloor \mod 2^i \choose \lfloor \frac{m}{2^{i - 1}} \rfloor \mod 2^i} \pmod 2
\]

\[{n \choose m} = \prod_{each.bit.of.n.and.m} {n' \choose m'} \pmod 2
\]

如果二进制下有任何一位\(n\)为\(0\)且\(m\)不为\(0\),那么就会出现\(m' > n'\)的项,结果就为\(0\)了

所以结果不为\(0\),当且仅当二进制下\(m\)是\(n\)的子集

所以枚举子集dp即可【\(f[i]\)表示以\(A[u] = i\)的\(u\)开头的合法子序列个数】

\([1,n]\)枚举子集的复杂度是\(O(3^{log(max\{a_i\})})\)

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 250000,maxm = 100005,INF = 1000000000,P = 1e9 + 7;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
int f[maxn],a[maxn],ans,n;
int main(){
n = read();
REP(i,n) a[i] = read();
for (int i = n; i; i--){
int u = a[i];
for (int j = u; j; j = (j - 1) & u){
f[u] = (f[u] + f[j]) % P;
}
ans = (ans + f[u]) % P;
f[u]++;
}
printf("%d\n",ans);
return 0;
}

最新文章

  1. .NET正则表达式基础入门
  2. Ubuntu[1]安装Vesta Control Panel
  3. web api 处理发送过来的文件(图片)
  4. java jsp调用shell(带参数)脚本并返回值
  5. 我的WebService入门
  6. 2015国产犯罪传记《暴力天使》HD720P.泰语中字
  7. Linux 计划任务 Crontab 笔记与总结(2)Crontab 的基本组成与配置
  8. iOS - (个人隐私钱包调用系统本机TouchID指纹锁验证)
  9. ios 调试
  10. c#中的peek()方法
  11. IDL 实现PCA算法
  12. 201521123034 《Java程序设计》第3周学习总结
  13. CSS引入
  14. 关于using namespace std
  15. PHP7 学习笔记(十二)Stream 函数详解
  16. python 使用gevent模块实现手动挡切换多协程。
  17. 蓝图Tips
  18. 生活实遇记-Kindle好久没用,屏幕一直处于电池状态,怎么解决?
  19. 使用JUnit测试预期异常
  20. Selenium基本使用(十一)异常捕获

热门文章

  1. 使ListView控件中的选择项高亮显示
  2. 父子组件通信(vuex的方式)
  3. python_10_for guess
  4. vue实现tab切换功能精简版
  5. SQLSERVER存储过程的基本语法实例
  6. U盘装系统之winpe中常用安装win7的方法和备份(2013-01-15-bd 写的日志迁移
  7. python正则表达式入门篇
  8. ubuntu下eclipse c++开发
  9. 笔记-HTTP代理
  10. Linux系统自启动脚