题意:

求在[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;
}

Codeforces 628D Magic Numbers的更多相关文章

  1. CodeForces 628D Magic Numbers (数位dp)

    题意:找到[a, b]符合下列要求的数的个数. 1.该数字能被m整除 2.该数字奇数位全不为d,偶数位全为d 分析: 1.dp[当前的位数][截止到当前位所形成的数对m取余的结果][当前数位上的数字是 ...

  2. Codeforces 320A Magic Numbers

    因为晚上有一个cf的比赛,而自己从来没有在cf上做过题,就找了道题熟悉一下. 题目大意:给一个数,判断是否能由1,14,144三个数连接得到. 代码如下: #include <stdio.h&g ...

  3. 628D Magic Numbers

    传送门 题目大意 定义n-magic为从左往右,偶数位置均为n,奇数位置不为n的一类数.求出[a,b]内所有可被m整除的d-magic个数. 分析 显然是数位dp,我们用dp[i][j][k]表示考虑 ...

  4. Magic Numbers CodeForces - 628D

    Magic Numbers CodeForces - 628D dp函数中:pos表示当前处理到从前向后的第i位(从1开始编号),remain表示处理到当前位为止共产生了除以m的余数remain. 不 ...

  5. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...

  6. Codeforces CF#628 Education 8 D. Magic Numbers

    D. Magic Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  7. Educational Codeforces Round 8 D. Magic Numbers

    Magic Numbers 题意:给定长度不超过2000的a,b;问有多少个x(a<=x<=b)使得x的偶数位为d,奇数位不为d;且要是m的倍数,结果mod 1e9+7; 直接数位DP;前 ...

  8. CodeForces 628 D Magic Numbers 数位DP

    Magic Numbers 题意: 题意比较难读:首先对于一个串来说, 如果他是d-串, 那么他的第偶数个字符都是是d,第奇数个字符都不是d. 然后求[L, R]里面的多少个数是d-串,且是m的倍数. ...

  9. Codeforces Round #189 (Div. 2) A. Magic Numbers【正难则反/给出一个数字串判断是否只由1,14和144组成】

    A. Magic Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

随机推荐

  1. C# Equals的重写

    using System; using System.Collections.Generic; using System.Text; namespace Equal {     using Syste ...

  2. 短视频SDK用于旅游行业

    超级简单易用的短视频SDK来自RDSDK.COM.锐动天地为开发者提供短视频编辑.视频直播.特效.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨 ...

  3. Objective -C Categories

    Objective -C Categories  The dynamic runtime dispatch mechanism employed by Objective-C lets you add ...

  4. JAVA 学习笔记 - 反射机制

    1.   JAVA反射机制的概念 2. 怎样实例化一个 Class对象 Class.forName(包名.类名); 对象.getClass(); 类.class; ================== ...

  5. 整合Activiti Modeler到业务系统(或BPM平台)

    http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html 1. 为什么要整合 Activiti 5.10版本把 ...

  6. bzoj3994: [SDOI2015]约数个数和(反演+结论?!)

    这题做的历程堪称惊心动魄 刚刚学了莫比乌斯反演的我高高兴兴的和cbx一起反演式子 期间有突破,有停滞,有否定 然后苟蒻的我背着cbx偷偷打开了题解 看到了 我...... 去你的有个性质啊(当然还是自 ...

  7. 雷林鹏分享:PHP Secure E-mails

    在上一节中的 PHP e-mail 脚本中,存在着一个漏洞. PHP E-mail 注入 首先,请看上一章中的 PHP 代码: if (isset($_REQUEST['email'])) { // ...

  8. JavaScript异步编程解决方案探究

    javascript的天生单线程特性,使得异步编程对它异常重要,早期的通常做法是用回调函数来解决.但是随着逻辑的复杂,和javascript在服务端的大显神通,使得我们很容易就陷入“回调陷井”的万丈深 ...

  9. 启发式合并CodeForces - 1009F

    E - Dominant Indices CodeForces - 1009F You are given a rooted undirected tree consisting of nn vert ...

  10. Maven 的相关配置

    第一步: 官方下载路径: http://maven.apache.org/download.cgi maven官方网站:http://www.mvnrepository.com/ 第二步: 请下载这个 ...