BZOJ4903: [Ctsc2017]吉夫特
传送门
可以发现,\(\binom{n}{m}\equiv 1(mod~2)\) 当且仅当 \(m~and~n~=~m\)
即 \(m\) 二进制下为 \(n\) 的子集
那么可以直接写一个 \(3^{18}\) 的枚举子集 \(DP\)
但是还有一个 \(6^9\) 的做法
把数字分成前 \(9\) 位和后 \(9\) 位
设 \(f(s_1,s_2)\) 表示前 \(9\) 位为 \(s_1\),后 \(9\) 位为 \(s_2\) 的超集的答案
那么对于一个数 \(x\),分成 \(x_1,x_2\),转移的时候枚举 \(x_1\) 的超集,更新的时候枚举 \(x_2\) 的子集即可
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn(1 << 9);
const int mod(1e9 + 7);
inline void Inc(int &x, int y) {
x = x + y >= mod ? x + y - mod : x + y;
}
int n, f[maxn][maxn], sz = maxn - 1;
int main() {
register int i, j, v, f1, f2, t, g;
scanf("%d", &n);
for (i = 1; i <= n; ++i) {
scanf("%d", &v), f1 = v >> 9, f2 = v & sz, g = 1;
for (t = j = sz ^ f1; ; j = (j - 1) & t) {
Inc(g, f[sz ^ j][f2]);
if (!j) break;
}
for (j = f2; ; j = (j - 1) & f2) {
Inc(f[f1][j], g);
if (!j) break;
}
}
for (g = mod - n, i = 0; i <= sz; ++i) Inc(g, f[i][0]);
printf("%d\n", g);
return 0;
}
BZOJ4903: [Ctsc2017]吉夫特的更多相关文章
- bzoj千题计划247:bzoj4903: [Ctsc2017]吉夫特
http://uoj.ac/problem/300 预备知识: C(n,m)是奇数的充要条件是 n&m==m 由卢卡斯定理可以推出 选出的任意相邻两个数a,b 的组合数计算C(a,b)必须是奇 ...
- BZOJ4903 UOJ300 CTSC2017 吉夫特 【Lucas定理】
BZOJ4903 UOJ300 CTSC2017 吉夫特 弱弱地放上题目链接 Lucas定理可以推一推,发现C(n,m)是奇数的条件是n" role="presentation&q ...
- 【CTSC2017】【BZOJ4903】吉夫特 卢卡斯定理 DP
题目描述 给你一个长度为\(n\)的数列\(a\),求有多少个长度\(\geq 2\)的不上升子序列\(a_{b_1},a_{b_2},\ldots,a_{b_k}\)满足 \[ \prod_{i=2 ...
- 【bzoj4903/uoj300】[CTSC2017]吉夫特 数论+状压dp
题目描述 给出一个长度为 $n$ 的序列,求所有长度大于等于2的子序列个数,满足:对于子序列中任意两个相邻的数 $a$ 和 $b$ ($a$ 在 $b$ 前面),${a\choose b}\mod 2 ...
- bzoj4903 & loj2264 [Ctsc2017]吉夫特 Lucas 定理+状压DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4903 https://loj.ac/problem/2264 http://uoj.ac/pr ...
- [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 ...
- [UOJ300][CTSC2017]吉夫特
uoj bzoj luogu sol 根据\(Lucas\)定理,\(\binom nm \mod 2=\binom{n\%2}{m\%2}\times\binom{n/2}{m/2}\mod 2\) ...
随机推荐
- python2与python3 的pip的安装
python2的pip安装 $ sudo apt-get install python-pip python2安装第三方包 $ sudo pip install packagename python3 ...
- day 12 课后作业
# -*- coding: utf-8 -*-# @Time : 2019/1/4 20:49# @Author : Endless-cloud# @Site : # @File : day 12 课 ...
- delphi 10.2 ----简单的叠乘例子
unit Unit11; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...
- gitLab创建自己的私有库
一.创建私有库的流程简介 创建一个项目,留着后面的流程3制作私有库 在可以创建私有库的地方创建一个code repository, code repository是代码仓库,我们把代码上传到这个仓库. ...
- mysql使用常见问题
常见问题之一: 启动mysql时显示: The server quit without updating PID file 1.可能是/usr/local/mysql/data/mysql.pid文件 ...
- SQL Server性能监控常用语句
.查找目前SQL Server所执行的SQL语法,并展示资源情况: SELECT s2.dbid , DB_NAME(s2.dbid) AS [数据库名] , --s1.sql_handle , ( ...
- 新创建的数据库,执行db2look时,遇到package db2lkfun.bnd bind failed
在新创建的数据库中,执行db2look的时候,存在这样的问题 db2v97i1@oc0644314035 ~]$ db2look -d sample -e -l -o db2look.ddl -- N ...
- 什么是Java代码的编译与反编译?(转)
转自:http://java.tedu.cn/ask/203119.html Java代码的编译与反编译 一.什么是编译 1.利用编译程序从源语言编写的源程序产生目标程序的过程. 2.用编译程序产生目 ...
- mongo 语法 增删改查
1.增 db.collection.insert()与db.collection.save() 都是增加,区别:save()遇到相同_id后,则更新此_id数据. 而insert()则报错 > ...
- leetcode4:Permutation
#include <utility> #include <iostream> #include <vector> #include <algorithm> ...