题意:

求在[a,b](a,b不含前导0)中的d−magic数中有多少个是m的倍数。

分析:

计数dp

Let’s call a number d-magic if digit d appears in decimal presentation of the number on even positions and nowhere else.

仔细读题并观察例子就可以明确d−magic数从左到右所有偶数位置上都是d,奇数位上不能是d

求[a,b],即可转化为求[1,a],[1,b]中的满足条件的数,最后相减,注意判断a是否满足条件。

设dp[i][j][k]表示前缀为i位,余数为j,等于(1)或者小于(0)上限的方案数。容易想到状态转移的过程,注意分填入的数字小于和等于上限对应元素两种情况处理。

代码:

#include<cstdio>
#include<cstring>
const int mod = 1e9+7, maxn = 2005;
int m, d;
int dp[maxn][maxn][2];
char a[maxn], b[maxn];
int num[maxn];
int solve(char* A)
{
memset(dp, 0, sizeof(dp));
memset(num, 0, sizeof(num));
int cnt = strlen(A);
for(int i = 0; i < cnt; i++){
num[i+1] = A[i] - '0';
}
for(int i = 1; i<=num[1];i++){
if(i == d)continue;
if(i < num[1]){
dp[1][i%m][0]++;
}else{
dp[1][i%m][1]++;
}
} for(int i = 2; i <= cnt; i++){
for(int j = 0; j < m; j++){
if(i%2==0){
dp[i][(j * 10 + d)%m][0] = (dp[i][(j * 10 + d)%m][0] + dp[i - 1][j][0])%mod;
if(d < num[i])
dp[i][(j * 10 + d)%m][0] = ( dp[i][(j * 10 + d)%m][0] + dp[i - 1][j][1])%mod;
else if(d == num[i])
dp[i][(j * 10 + d)%m][1] = ( dp[i][(j * 10 + d)%m][1] + dp[i-1][j][1])%mod;
}else{
for(int k = 0; k < 10; k++){
if(k == d) continue;
dp[i][(j * 10 + k)%m][0] = (dp[i][(j * 10 + k)%m][0] + dp[i - 1][j][0])%mod;
if(k < num[i])
dp[i][(j * 10 + k)%m][0] = ( dp[i][(j * 10 + k)%m][0] + dp[i - 1][j][1])%mod;
else if(k == num[i])
dp[i][(j * 10 + k)%m][1] = ( dp[i][(j * 10 + k)%m][1] + dp[i-1][j][1])%mod;
}
}
}
} return (dp[cnt][0][0] + dp[cnt][0][1])%mod; }
int is(char* a)
{
int res = 0;
for(int i = 0; i < strlen(a); i++){
int a1 = a[i] - '0';
if(i%2 == 0){
if(a1 == d) return 0;
}
if(i%2==1){
if(a1 != d) return 0;
}
res = (res*10 +a1)%m;
}
return res == 0;
}
int main (void)
{
scanf("%d%d",&m,&d);
scanf("%s%s", a, b);
printf("%d\n", (solve(b) - solve(a) +is(a)+mod)%mod) ;
return 0;
}

最新文章

  1. 如何在WPF的DiagramControl中绘制一个类型数据关系图的方法
  2. 栈-java代码
  3. Javascript——闭包、作用域链
  4. 两个经典的Oracle触发器示例(轉)
  5. shell学习之路:流程控制(if)
  6. [转载]SAP BASIS学习手册
  7. Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法
  8. 移动端web页面使用position:fixed问题总结
  9. iOS安全攻防之使用 Frida 绕过越狱设备检测
  10. 用session做权限控制
  11. C#中string的相关方法
  12. [Android] Android Error: Suspicious namespace and prefix combination [NamespaceTypo] when I try create Signed APK
  13. 第十四节: EF的三种模式(四) 之 原生正宗的 CodeFirst模式的默认约定
  14. clouderamanager安装
  15. [06] 利用mybatis-generator自动生成代码
  16. Re:LieF ~親愛なるあなたへ~ 后感
  17. Visual Studio 2015 初体验
  18. Cocos2d-html5帧动画
  19. Balanced Lineup:线段树:区间最值 / RMQ
  20. PHP file_put_contents() 函数

热门文章

  1. AJPFX解析关于编码ansi、GB2312、unicode与utf-8的区别
  2. 文件及文件的操作-读、写、追加的t和b模式
  3. [BZOJ1008][HNOI2008]越狱 组合数学
  4. java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
  5. oracle 安装,启动 ,plsql 连接
  6. iOS---数据离线缓存
  7. table鼠标滑过变颜色
  8. 玩转CPU运行曲线
  9. photoshop cs6安装和破解步骤
  10. jQuery 点击 星星评分