题目传送门 戳此处转移 题目大意 给定一个长为$n$的序列,问它有多少个长度大于等于2的子序列$b_{1}, b_{2}, \cdots, b_{k}$满足$\prod_{i = 2}^{k}C_{b_{i - 1}}^{b_{i}} \equiv 1 \pmod{2}$.答案模$10^{9} + 7$ 考虑限制条件,即前后两个数$b_{i - 1}, b_{i}$,它们要满足$C_{b_{i - 1}}^{b_{i}} \equiv 1\pmod{2}$. 这样不好处理,考虑使用Lucas定理…
[BZOJ4903][UOJ#300]吉夫特(卢卡斯定理,动态规划) 题面 UOJ BZOJ:给的UOJ的链接...... 题解 首先模的质数更小了,直接给定了\(2\).当然是卢卡斯定理了啊. 考虑一个组合数在什么情况下会是一个奇数.\(Lucas(n,m)\equiv Lucas(n/2,m/2)*Lucas(n\%2,m\%2)\).后面这个东西一共只有\(4\)种取值,我们大力讨论一下:\(C_{0}^0=1,C_{0}^1=0,C_1^0=1,C_1^1=1\).既然是一个奇数,证明\…
题目链接 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.…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4903 https://loj.ac/problem/2264 http://uoj.ac/problem/300 题解 真 - 签到题. 对于一个组合数,直接进行 Luca 定理. \[ \binom nm = \binom {\frac n2}{\frac m2} \binom {n \bmod 2}{m\bmod 2} \] 可以发现,对于每一个二进制位,如果出现 \((0, 1)\)…
题目链接 首先\(C(n,m)\)为奇数当且仅当\(n\&m=m\). 简要证明: 因为是\(mod\ 2\),考虑Lucas定理. 在\(mod\ 2\)的情况下\(C(n,m)\)最后只会化成4种情况:\(C(0,1),C(0,0),C(1,0),C(1,1)\). 后三种情况都是1,\(C(0,1)\)不存在(=0).所以如果\(C(n,m)mod\ 2\)为偶数,那么在Lucas的过程中一定出现了\(C(0,1)\). \(mod\ 2\)的过程容易想到位运算. 由\(C(n,m)mod…
送70分,预处理组合数是否为偶数即可. 剩下的数据,根据Lucas定理的推论可得当且仅当n&m=n的时候,C(n,m)为奇数.这样就可以直接DP了,对于每个数,考虑它对后面的数的影响即可,直接枚举子集即可. #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=l; i<=r; i++) using namespace std; ,mod=; int n,ans,a[N],f[N],pos…
题意 满足$b_1 < b_2 < \dots < b_k$且$a_{b_1} \geqslant a_{b_2} \geqslant \dots \geqslant a_{b_k}$ Sol 组合数取模? 肯定考虑Lucas定理 考虑Lucas定理在最后一步肯定会化为$C(1, 1), C(1, 0), C(0, 0), C(0, 1)$. 很显然$C(0,1)$不存在,而其他的都等于$1$,因此当最后分解为$C(0, 1)$的时候不满足条件. 具体怎么判断呢?观察上式可以得到一个普遍…
BZOJ4903 UOJ300 CTSC2017 吉夫特 弱弱地放上题目链接 Lucas定理可以推一推,发现C(n,m)是奇数的条件是n" role="presentation">nn&m==m" role="presentation">m==mm==m,也就是说n是m的子集,这不就显然了吗 非常友好的枚举子集DP f[i]表示以i结尾的不下降序列的方案数什么的 #include<bits/stdc++.h> us…
uoj bzoj luogu sol 根据\(Lucas\)定理,\(\binom nm \mod 2=\binom{n\%2}{m\%2}\times\binom{n/2}{m/2}\mod 2\). 由于\(\binom{n\%2}{m\%2}\)的取值只可能是\(0\)或\(1\),以为我们希望\(\binom nm=1\mod 2\),所以\(\binom{n\%2}{m\%2}\)应该始终取值为\(1\).因为\(\binom 00=\binom 10=\binom 11=1,\bin…
题面: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 <c…
首先根据lucas, \[ C_n^m\%2=C_{n\%2}^{m\%2}*C_{n/2}^{m/2} \] 让这个式子的结果为计数的情况只有n&m==m,因为m的每一个为1的二进制位都需要n中这一位为1,否则结果就是0 所以枚举子集,设f[i]为以i开头的合法子序列个数,dp的时候枚举子集从后往前dp即可 #include<iostream> #include<cstdio> using namespace std; const int N=300005,mod=1e9…
http://uoj.ac/problem/300 预备知识: C(n,m)是奇数的充要条件是 n&m==m 由卢卡斯定理可以推出 选出的任意相邻两个数a,b 的组合数计算C(a,b)必须是奇数 所以可以设dp[i][j] 表示前i个数里面,选的最后一个数是第j个数的方案数 转移的时候,枚举前i-1个数选的最后一个数k, 若C(k,i)是奇数,dp[i][j]+=dp[i-1][k] 时间复杂度:O(n^3) #include<cstdio> #include<iostream&…
Description: 给定一个序列\(a_1,a_2,a_3...a_n\) 求有多少个不上升子序列: \(a_{b1},a_{b_2}...\) 满足 \(C_{a_{b1}}^{a_{b2}}*C_{a_{b2}}^{a_{b3}}*.....mod\ 2 >0\) 输出对\(10^9+7\)取模的结果 Hint: $ 1 ≤ n ≤ 211985, 1 ≤ ai ≤ 233333​\(.所有的\) a_i ​$互不相同 Solution: 由\(Lucas\)定理: $ C_n^m=C…
题目描述 给出一个长度为 $n$ 的序列,求所有长度大于等于2的子序列个数,满足:对于子序列中任意两个相邻的数 $a$ 和 $b$ ($a$ 在 $b$ 前面),${a\choose b}\mod 2\neq 0$.答案对 $10^9+7$取模. 输入 第一行一个整数 $n$ . 接下来 $n$ 行,每行一个整数,这 $n$ 行中的第 $i$ 行,表示 $a_i$ . $1\le n\le 211985,1\le a_i\le 233333$ 输出 一行一个整数表示答案. 样例输入 415731…
思路很巧妙的一道题 ~ 这个应该不完全是正解,复杂度约为 $O(3\times 10^8)$,有时间再研究研究正解. 首先,最裸的暴力是按照权值从小到大枚举每一个数,然后枚举后面的数来更新方案数,是 $O(n^2)$ 的. 然后,我们可以用lucas定理来模拟那个组合数,会发现只需满足大数&小数=小数即可. 这个的话可以枚举子集,复杂度就是 $O(3^{18})$ 左右的,大概能过 ~ code: #include <bits/stdc++.h> #define ll long lon…
题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4. 说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可. 你算法的时间复杂度应该为 O(n2) . 进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 思路分析:(题解来自:https://leetcode-cn.com/u/liweiwei1419/) 动态规…
luogu 这里的组合数显然要用\(\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\ \&\)(按位与)\…
传送门 看到组合数在模 $2$ 意义下的乘积,考虑用 $lucas$ 定理把组合数拆开 $lucas$ 告诉我们,$C(n,m)$ 在模 $k$ 意义下的值,相当于 $n,m$ 在 $k$ 进制下每一位的组合数分别相乘的积在模 $k$ 意义下的值 就是若 $n=\sum_{i=0}a[i]k^i$,$m=\sum_{i=0}b[i]k^i$,其中 $a[i],b[i] \in [0,k-1]$ ,那么 $C(n,m) \equiv \prod_{i=0}C(a[i],b[i])\ \ (mod\…
原文链接www.cnblogs.com/zhouzhendong/p/UOJ129.html 题解 考虑把大于等于 $\sqrt n$ 的质数和小于 $\sqrt  n$ 的分开考虑: 1. 小于等于 $\sqrt n$ 的质数最多只有 8 个. 2. 一个小于等于 n 的正整数最多包含 1 个 大于 $\sqrt n$ 的质因子,所以不同的这种质因子可以分离. 考虑对双方掌控了哪些小于等于 $\sqrt n$ 的质数进行状压,然后按照除去小于等于 $\sqrt n$ 的因子后的值,将所有数分成…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ185.html 题解 首先暴力DP是 $O(3^nn^3)$ 的,大家都会. 我们换个方向考虑. 假设我们求的是树上每一个节点到图上的节点的映射,而且图上的一个点可以被树上多个点映射到,那么就是求图上所有点都被映射到至少一次的方案数. 我们发现保证所有点都被映射到会很麻烦,所以我们考虑容斥. 枚举哪些点一定没有被映射到,答案就是至少0个点没被映射到的 - 至少1个点的 + 至少2个点的 …… 已经确定哪…
传送门 可以发现,\(\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…
(总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZOJ3786]星系探索(伪ETT) [BZOJ4337][BJOI2015]树的同构(树的最小表示法) [BZOJ3551][ONTAK2010]Peaks(加强版)(Kruskal重构树,主席树) [CTSC2017]游戏(Bayes定理,线段树) 4.19 [CTSC2017]吉夫特(Lucas定…
昨天考试由于不会fwt而爆炸,所以今天搞了一下fwt……话说这玩意的普及程度已经很高了.fwt,快速沃尔什变换,可以用于位运算卷积的优化,是一种线性变换,所以就会有许多好的性质(eg:可以直接模,可以修改运算等). & | ^ 的变换定义与方法是基础,在此基础上的扩展与运用是重要的地方.HZOI #1572.宇宙序列 notes: 这就是造成我考试爆炸的考试题,见Contest Record UOJ #310.[UNR #2]黎明前的巧克力 notes: 感觉比较灵活的一道题.首先写出裸dp,之…
NOIP考点 基础算法 图 树 数论 数据结构 动态规划 搜索 其他算法 省选知识点汇总 图论 数据结构 字符串相关算法及数据结构 数学 计算几何 搜索 动态规划 其他算法 转自:巨佬的博客 加*号是选学,加粗为重点,重要值排序不分先后 NOIP考点 基础算法 贪心.枚举.分治.二分.倍增.*构造.高精.模拟.图论 图 最短路(dijkstra.spfa.floyd),差分约束 最小生成树(kruskal.prim) 并查集(扩展域) 拓扑排序 二分图染色,*二分图匹配 tarjan找scc.桥…
题意 分析 考场50分 旁边的L君告诉我,求的就是非升子序列的个数,于是写了个树状数组. 但是\(\mod{2333} > 0\)还需要组合数中没有2333的倍数,所以实际上只得了\(a_i \leq 2333\)的部分分,还好. #include<cstdlib> #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<string…
目录 Noip 训练指南 图论 数据结构 位运算 期望 题解 Noip 训练指南 目前完成 \(4 / 72\) 图论 [ ] 跳楼机 [ ] 墨墨的等式 [ ] 最优贸易 [ ] 泥泞的道路 [ ] BZOJ2959 [ ] BZOJ2535 数据结构 [ ] luog 2572 [SCOI2010]序列操作 [ ] luogu2184 [ ] cf620E New year tree [ ] GSS1 [ ] GSS3 [ ] GSS4 [ ] HDU6315 [ ] luogu2073 […
题目:http://uoj.ac/problem/122 85%做法: 动态规划. 首先重编号,BFS序变成1...n,然后DFS序相应重编号. 记pos[i]为i号点在DFS中的位置,即pos[d[i]]=i. 记F[l][r]表示BFS序中l...r号点相同高度时的高度和,G[l][r]表示BFS序中l...r号点相同高度的个数. 我们要寻找合法的k,使得[r+1][k]作为下一层,然后转移: F[r+1][k]+=F[l][r]+G[l][r] G[r+1][k]+=G[l][r] 我们要…
1000-1009 1000A+B Problem 这个还要写??? 1001 狼抓兔子 平面图最小割转化为对偶图最短路 #include<bits/stdc++.h> #define id(i , j , k) ((k) * (N - 1) * (M - 1) + ((i) - 1) * (M - 1) + (j)) #define PII pair < int , int > #define st first #define nd second //This code is w…
这是一种DP状态设计方法. 有些题,当你必须以一个顺序往后填的话,然而后面的填法会对之前产生影响,那么,不妨在之前就对未来怎么填做出承诺. 通俗的讲,就是对未来打一个表. 然后后面填的时候,直接查表转移. 当然,毕竟也是一个打表,所以既要记录前面信息,又要记录后面的承诺,复杂度是比较高的.要看数据范围支不支持了. 状态经常设计成,前i个,填了....,如果后面填....的话,答案会是多少. 一. 序列上的一个比较经典的题:[CTSC2017]吉夫特 方法类似这一篇中的第一个例题:根号算法——暴力…
对于刚进入大学的计算机类同学来说,算法与程序设计竞赛算是不错的选择,因为我们每天都在解决问题,锻炼着解决问题的能力. 这里以TZOJ题目为例,如果为其他平台题目我会标注出来,同时我的主页也欢迎大家去访问,探索新平台去提高自己 ACM竞赛随机性会比较大,所以新手请掌握好基础,基础不牢,地动山摇(大一上) C语言题 包括TZOJ1452在内的60道C语言实验题,可以利用OJ的搜索,由于这种题目比较多,就不一一列举 暴力枚举 3449 5125 4604 2626 递归 1483 模拟 1093 37…