uoj#300.【CTSC2017】吉夫特
2024-08-30 06:15:26
题面:http://uoj.ac/problem/300
一道大水题,然而我并不知道$lucas$定理的推论。。
$\binom{n}{m}$为奇数的充要条件是$n&m=n$。那么我们对于每个数,直接枚举子集转移就行了,复杂度是$O(3^{18})$,不会$T$。
//It is made by wfj_2048~
#include <algorithm>
#include <iostream>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define rhl (1000000007)
#define inf (1<<30)
#define N (300010)
#define il inline
#define RG register
#define ll long long
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) using namespace std; int f[N],a[N],b[N],n,ans; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} il void work(){
n=gi(); for (RG int i=;i<=n;++i) a[i]=gi(),b[a[i]]=i;
for (RG int i=;i<=n;++i){
ans+=(f[i]++); if (ans>=rhl) ans-=rhl;
for (RG int s=a[i];s;s=(s-)&a[i])
if (b[s]>i){ f[b[s]]+=f[i]; if (f[b[s]]>=rhl) f[b[s]]-=rhl; }
}
printf("%d\n",ans); return;
} int main(){
File("gift");
work();
return ;
}
最新文章
- Laravel Composer and ServiceProvider
- java回调初步学习
- Redis常用命令入门3:列表类型
- SQLAlchemy 几种查询方式总结
- 由ArrayList构造函数源码引出的问题
- 能用Shell就别编程-海量文本型数据的处理
- Oracle11g中ORA-01790
- Ruby Regexp
- paip. mysql如何临时 暂时 禁用 关闭 触发器
- lucene 实现word,pdf全文检索源码
- C#调用API函数EnumWindows枚举窗口的方法
- Node.js入门-Node.js 介绍
- CF 332A Down the Hatch! 超级水题。。不过题目太长了
- 20ms Ac Code
- node c++多线程插件 第二天 c++指针
- [51nod1297]管理二叉树
- ubuntu14.04 64位 安装Tomcat
- Python内置函数(45)——ascii
- LeetCode_406. Queue Reconstruction by Height解题思路
- Java 四种引用介绍及使用场景