数位dp
文章平均质量分 62
Jozky86
这个作者很懒,什么都没留下…
展开
-
Sum of Log(2020上海C)
Sum of Log 题意: 求∑i=0X∑j=[i=0]Y[i&j=0]⌊log2(i+j)+1⌋\sum_{i=0}^{X}\sum_{j=[i=0]}^{Y}[i\&j=0]\lfloor log_{2}(i+j)+1\rfloor∑i=0X∑j=[i=0]Y[i&j=0]⌊log2(i+j)+1⌋ 题解: 数位dp 如果式子想有意义,i&j就要等于0,也就是i和j的任何一位都不能同时为1,那么i+j就不会产生进位,也就是⌊log2(i+j)+1⌋\lfloor原创 2021-09-22 11:24:18 · 406 阅读 · 0 评论 -
Xor HDU - 6899
Xor HDU - 6899 题意: 给你A,B,K,W,问现在有多少个(x,y)满足下列形式? x,y都是整数 x∈[0,A],y∈[0,B] |x-y|<=k x xor y<=W 题解: 数位dp 对于第1,2,4都是经典的数位dp转移 对于第三点怎么转移? 我们将绝对值拆开,得到x−y<=k,y−x<=kx-y<=k,y-x<=kx−y<=k,y−x<=k 整理下:k+y−x>=0,k−y+x>=0k+y-x>=0,k-y+x&g原创 2021-09-21 20:30:50 · 115 阅读 · 0 评论 -
CF1245F Daniel and Spring Cleaning(等会了更新)
CF1245F Daniel and Spring Cleaning 题意: 给定l,r,求∑a=lr∑b=lr[a+b=a⊕b]\sum_{a=l}^{r}\sum_{b=l}^{r}[a+b=a⊕b]∑a=lr∑b=lr[a+b=a⊕b] 题解: 代码:原创 2021-09-21 11:51:21 · 97 阅读 · 0 评论 -
P6669 [清华集训2016] 组合数问题
P6669 [清华集训2016] 组合数问题 题意: 给你n,m,k,问有多少对(i,j)满足K∣CijK|C_{i}^{j}K∣Cij (Cij是k的倍数C_{i}^{j}是k的倍数Cij是k的倍数) n,m<=1e18 题解: n和m非常大,非常非常大,很容易想到用卢卡斯来化简 Cnm mod p=Cn/pm/p∗Cn%pm%pC_{n}^{m}\bmod p=C_{n/p}^{m/p}*C_{n\%p}^{m\%p}Cnmmodp=Cn/pm/p∗Cn%pm%p 对于i%p的范围就会很原创 2021-08-27 16:13:36 · 217 阅读 · 0 评论 -
Find 3-friendly Integers
Find 3-friendly Integers 题意: 定义一个自然数是精妙的,如果他存在一个字串(允许前导0)是3的倍数 问L到R中精妙的数的个数 题解: 数位dp可以做(但我不会。。。) 用结论来做,当n>=100时(即为3位数时)必然是精妙的数,这样只需要对<100的暴力即可。这样想,对于每一位mod3,也就是每一位是0/1/2中的一个,如果是0直接合法,也就是剩下3位中分别选1/2,怎么都会有和为3倍数的情况 代码: #include<iostream> #include&原创 2021-07-23 16:14:51 · 165 阅读 · 0 评论 -
Meaningless Sequence Gym - 102832D
Meaningless Sequence Gym - 102832D 题意: 给你n和c,an的公式如下图 让你求a0+…an的和,mod 1e9+7 题解: 训练时推了好一阵子才和队友推出 我看网上正解为: 一个数的大小与它的二进制表示中的1的个数有关 a=c(二进制中1的个数) 问题就变成了转化为求所有数中1的个数, dp[i][j]为考虑i~n位,有j个1的情况有多少种,然后数位dp跑,详细可以看代码 训练时我们是找到了规律,我通过列出1~20的ai答案,发现规律,比如7,对应的二进制是111,那么原创 2021-07-13 18:55:09 · 205 阅读 · 0 评论 -
Acwing1086. 恨7不成妻(未解决)
Acwing1086. 恨7不成妻 题意: 问一个区间内与7无关的整数的平方和 与7有关包括: 1.整数中某一位是 7; 2.整数的每一位加起来的和是 7 的整数倍; 3.这个整数是 7 的整数倍。 题解: 数位dp,有点难。。 这个题解讲的非常详细 参考题解 代码: ...原创 2021-07-08 15:44:02 · 128 阅读 · 0 评论 -
Acwing 1085. 不要62
Acwing 1085. 不要62 题意: 问[n,m]这些数中有多少数不包含4,且不包含连续的62 题解: 经典数位dp,分析过程以前的数位dp博客有写 Acwing 1082. 数字游戏 代码: #include<bits/stdc++.h> #define debug(a,b) printf("%s = %d\n",a,b); typedef long long ll; using namespace std; inline int read(){ int s=0,w=1;原创 2021-07-08 15:18:17 · 140 阅读 · 0 评论 -
Acwing 1084. 数字游戏 II
Acwing 1084. 数字游戏 II 题意: 指定一个整数闭区间 [a.b],问这个区间内有多少个取模数。 取模数:这种数字必须满足各位数字之和 mod N 为 0。 题解: 数位dp 这里不细讲数位dp了,可以看看 Acwing 1081. 度的数量(以及本人对数位dp的浅薄理解) Acwing 1082. 数字游戏 这里光讲讲本题与数位dp模板不同的地方 本题要求是的是各位数之和mod N为0 在预处理树的左侧部分时,我们设dp[i][sum][j]:表示长度为i,最高位为j的,各位之和%N等于su原创 2021-07-07 17:05:48 · 169 阅读 · 0 评论 -
Acwing 1081. 度的数量(以及本人对数位dp的浅薄理解)
题意: 求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整数次幂之和。 题解: 数位DP 技巧1:[X,Y]=>f(Y)-f(X-1) 技巧2:用树的方式来考虑。 在本题中,题意是问[X,Y]中的数 转发成B进制,B进制有K位是1 比如样例中:17 ,k=2,B=2 就是把17转成二进制,看二进制中是否有K个1 17的二进制是:10001,说明17=24+20,符合要求 我们现在想具体做法:我们利用前缀和的方式,想法1~n之间符合要求的个数,这样就可以方便求出原创 2021-07-07 16:10:23 · 407 阅读 · 0 评论 -
Acwing 1083. Windy数
Acwing 1083. Windy数 题意: Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数。 Windy 想知道,在 A 和 B 之间,包括 A 和 B,总共有多少个 Windy 数? 题解: 和这个题没啥区别Acwing 1082. 数字游戏题解连接 代码: #include<bits/stdc++.h> #define debug(a,b) printf("%s = %d\n",a,b); typedef long long原创 2021-07-07 15:45:18 · 181 阅读 · 0 评论 -
Acwing 1082. 数字游戏
Acwing 1082. 数字游戏 题意: 现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数。 题解: 利用数位dp的套路来做 我们还是利用前缀和来做 我们先求1~n中满足情况的个数 对于一个n位数,我们将其每一位用vector存(an-1 ~ a0),我们从高位到低位开始一位一位考虑,对于第an-1位,我们有两种考虑情况,一个是填0 ~ an-1-1,另一个是填an-1,对于第一个情况,往往是可以直接求出来的,利用组合数或者dp可以求出,在本题中,我们用dp来求第一个情况原创 2021-07-07 14:58:59 · 224 阅读 · 0 评论