解题:CTSC 2017 吉夫特
2024-08-29 23:55:40
首先有个结论:$C_n^m$为奇数当且仅当$m$是$n$的一个子集
于是从后往前推,记录每个数出现的位置,然后对每个位置枚举子集统计在它后面的贡献即可
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
const long long mod=1e9+;
long long a[N],dp[N],pos[N];
long long n,ans;
int main()
{
scanf("%lld",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
pos[a[i]]=i,dp[i]=;
}
for(int i=n;i;i--)
{
dp[i]=;
for(int j=a[i];j;j=a[i]&(j-))
if(pos[j]>i) dp[i]=(dp[i]+dp[pos[j]])%mod;
ans+=dp[i];
}
printf("%lld",(ans-n+mod)%mod);
return ;
}
最新文章
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
- UIScrollView滚动视图
- 修改Tomcat编码方式的两种方法
- AD9 笔记:
- AngularJs学习笔记--html compiler
- SQL SERVER 2008 R2 错误代码 17000 - 17999
- 跟踪MYSQL 的查询优化过程方法
- Python3.4入门之ifelse错误解决方案
- Vue H5 History 部署IIS上404问题
- springboot项目启动时提示Address already in use: bind
- python的高阶函数式编程
- 【Noip模拟 20160929】选数
- 简单登录注册实现(Java面向对象复习)
- ubuntu LAMP的安装
- Latex:多个公式使用同一个编号(右对齐)
- python-day21--time模块
- 基于Hadoop开发网络云盘系统架构设计方案第一稿
- 微信小程序-简易计算器
- 2015年传智播客JavaEE 第168期就业班视频教程 02-ERP简介
- java项目迁移