数位dp
_beginend
这个作者很懒,什么都没留下…
展开
-
bzoj 2992: Pku3986 Math teacher's homework 数位dp
题意 给出两个整数K,N和一个整数序列M1,M2…Mn 求满足X1 Xor X2 Xor X3…Xor Xn=k且0<=Xi<=Mi(i=1…n)的解的个数 1≤n≤50,0≤k,m1,m2…mn≤231−11≤n≤50,0≤k,m1,m2…mn≤231−11\le n\le50,0\le k,m_1,m_2…m_n\le2^{31}-1 分析 我们按从高到底位进行处理。 ...原创 2018-04-17 21:07:59 · 311 阅读 · 0 评论 -
bzoj 3598: [Scoi2014]方伯伯的商场之旅 数位dp
题意 方伯伯有一天去参加一个商场举办的游戏。商场派了一些工作人员排成一行。每个人面前有几堆石子。说来也巧,位置在 i 的人面前的第 j 堆的石子的数量,刚好是 i 写成 K 进制后的第 j 位。 现在方伯伯要玩一个游戏,商场会给方伯伯两个整数 L,R。方伯伯要把位置在 [L, R] 中的每个人的石子都合并成一堆石子。每次操作,他可以选择一个人面前的两堆石子,将其中的一堆中的某些石子移动到另一堆...原创 2018-03-26 14:25:00 · 287 阅读 · 0 评论 -
Codeforces 840E In a Trap 分块+数位dp
题意 给一棵树,每个节点有点权a[i],有q次询问,每次询问给出u和v,表示询问u到v路径上每个点x的a[x] xor dis(x,v)的最大值。其中保证u必定是v的祖先。 a[i]<=n<=50000,q<=150000 分析 做法比较巧妙的一道题。 我们可以维护对于每一个点向上256个点的信息,这样查询的时候我们就可以每次跳256位,然后前面8个二进制位对我们就...原创 2018-03-07 20:50:10 · 362 阅读 · 0 评论 -
51nod 1569 二项式系数的个数 kummer定理+数位dp
题意给定一个质数p和整数a,A。请计算有多少对CknC_n^k满足0≤k≤n≤A 且 CknC_n^k是 pap^a 的倍数。 答案比较大,对 10^9+7 取余再输出。 1≤p,a≤10^9, p 是质数,0≤A<10^1000分析知道kummer定理后直接数位dp就好了。 设f[i,j,0/1,0/1]表示有多少个数对(x,y)从高到低做到第i位,进位了j次,x+y的前i位是否卡着A的上界原创 2017-12-25 21:17:09 · 560 阅读 · 0 评论 -
51nod 1245 Binomial Coefficients Revenge kummer定理+数位dp
题意C(M,N) = M! / N! / (M - N)! (组合数)。给出M和质数p,求C(M,0), C(M,1)……C(M,M)这M + 1个数中,有多少数不是p的倍数,有多少是p的倍数但不是p^2的倍数,有多少是p^2的倍数但不是p^3的倍数……。 1 <= T <= 5000,2 <= M, P <= 10^18分析去学习了一发kummer定理,简称库默尔定理。大概就是说 然后原创 2017-12-17 09:32:10 · 478 阅读 · 0 评论 -
Codeforces Round #228 Div.1 D 数位dp+数学
题意设S为非负整数集。若对任意a,b∈Sa,b\in S有a⊕b∈Sa\oplus b\in S,则称S是好的。其中a⊕ba\oplus b表示a异或b。问有多少个集合S满足S是好的且S中的最大值不超过n。 n<=10^9,答案模1e9+7输出。分析14年集训队论文《浅谈线性相关》的论文题。 根据定义不难得到一个好的集合必然是一个线性空间。那么我们就可以用一组基来表示这个集合。现在问题在于如何使原创 2017-12-07 20:18:30 · 289 阅读 · 0 评论 -
bzoj 4513: [Sdoi2016]储能表 数位dp
题意给出n,m,k,p,求(∑i=0n−1∑j=0m−1max((i⊕j)−k,0))modp(\sum\limits_{i=0}^{n-1}\sum\limits_{j=0}^{m-1}max((i\oplus j)-k,0))\bmod p,其中⊕\oplus表示异或。多组数据。 T<=5000,n,m,k<=10^18,p<=10^9分析我的方法是设f[i,0/1,0/1,0/1]表示从高到原创 2017-11-25 08:05:17 · 347 阅读 · 0 评论 -
bzoj 3131: [Sdoi2013]淘金 数位dp+堆
题意小Z在玩一个叫做《淘金者》的游戏。游戏的世界是一个二维坐标。X轴、Y轴坐标范围均为1..N。初始的时候,所有的整数坐标点上均有一块金子,共N*N块。 一阵风吹过,金子的位置发生了一些变化。细心的小Z发现,初始在(i,j)坐标处的金子会变到(f(i),f(j))坐标处。其中f(x)表示x各位数字的乘积,例如f(99)=81,f(12)=2,f(10)=0。如果金子变化后的坐标不在1..N的范围内原创 2017-12-12 21:43:55 · 301 阅读 · 0 评论 -
51nod 1230 幸运数 数位dp
题意如果一个数各个数位上的数字之和是质数,并且各个数位上的数字的平方和也是质数,则称它为幸运数。 例如:120是幸运数,因为120的数字之和为3,平方和为5,均为质数,所以120是一个幸运数字。 给定x,y,求x,y之间( 包含x,y,即闭区间[x,y])有多少个幸运数。 1 <= T <= 10000,1 <= X <= Y <= 10^18分析一开始想的是设f[i,0/1,j,k]表示做到原创 2017-10-31 14:54:39 · 392 阅读 · 0 评论 -
bzoj 3329: Xorequ 数位dp+矩阵乘法
题意 T<=1000,n<=10^18分析式子画一下就变成了x^2x=3x=x+2x 容易发现其实就是要求[1,n]内有多少个数满足其二进制任意相邻的两位不同时为1. 第一问的话随便数位dp一下就好了。 第二问的话,把dp式列出来,会发现答案就是斐波那契数列的第n+2项,直接矩阵乘法快速幂即可。代码#include<iostream> #include<cstdio> #include<cs原创 2017-05-31 16:56:56 · 401 阅读 · 0 评论 -
Codeforces 908G New Year and Original Order 数位dp
题意 定义S(n)S(n)S(n)为nnn在十进制表示下每一位数字从小到大排序后拼接得到的数字。 求∑i=1nS(i)\sum_{i=1}^nS(i)i=1∑nS(i) n≤10700n\le10^{700}n≤10700 分析 用dp求出fi,jf_{i,j}fi,j表示有多少个xxx满足S(x)S(x)S(x)的第iii位至少为jjj。 dp的时候设fi,j,0/1f_{i,j,0/1}f...原创 2019-07-10 11:24:45 · 148 阅读 · 0 评论