传送门

题目大意

定义n-magic为从左往右,偶数位置均为n,奇数位置不为n的一类数。求出[a,b]内所有可被m整除的d-magic个数。

分析

显然是数位dp,我们用dp[i][j][k]表示考虑到第i位,小于还是等于范围,对m取模的余数为k的时候的个数,然后我们枚举所有满足情况的j(i为奇数则j不能为d,i为偶数则j只能为d)进行转移,转移为经典的数位dp转移。最后记得因为答案取模过所以可能在相减后变为负数因此要进行一下特殊处理。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int mod = 1e9+;
int d,M,dp[][][],a[],cnt,m[];
char s[];
int go(){
int i,j,k;
scanf("%s",s);
cnt=strlen(s);
m[]=;
for(i=;i<cnt;i++){
a[i+]=(s[i]-'');
m[i+]=(m[i]*+a[i+])%M;
}
memset(dp,,sizeof(dp));
dp[][][]=;
for(i=;i<=cnt;i++){
for(j=;j<=a[i];j++){
if((i&)&&j==d)continue;
if(!(i&)&&j!=d)continue;
k=m[i-];
int x=(k*+j)%M;
if(j==a[i])dp[i][][x]=(dp[i][][x]+dp[i-][][k])%mod;
else dp[i][][x]=(dp[i][][x]+dp[i-][][k])%mod;
}
for(j=;j<=;j++)
for(k=;k<M;k++){
if((i&)&&j==d)continue;
if(!(i&)&&j!=d)continue;
int x=(k*+j)%M;
dp[i][][x]=(dp[i][][x]+dp[i-][][k])%mod;
}
}
return (dp[cnt][][]+dp[cnt][][])%mod;
}
int ck(){
int ok=,sum=;
for(int i=;i<=cnt;i+=){
sum=((sum<<)+(sum<<)+a[i])%M;
if(a[i]==d)return ;
}
for(int i=;i<=cnt;i+=){
sum=((sum<<)+(sum<<)+a[i])%M;
if(a[i]!=d){
ok=;
break;
}
}
if(sum)ok=;
return ok;
}
int main(){
scanf("%d%d",&M,&d);
cout<<abs(go()-ck()-go()-mod)%mod<<endl;
return ;
}

628D Magic Numbers的更多相关文章

  1. Codeforces 628D Magic Numbers

    题意: 求在[a,b](a,b不含前导0)中的d−magic数中有多少个是m的倍数. 分析: 计数dp Let's call a number d-magic if digit d appears i ...

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

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

  3. Magic Numbers CodeForces - 628D

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

  4. 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 ...

  5. Educational Codeforces Round 8 D. Magic Numbers

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

  6. URAL 1727. Znaika&#39;s Magic Numbers(数学 vector)

    主题链接:http://acm.timus.ru/problem.aspx?space=1&num=1727 1727. Znaika's Magic Numbers Time limit: ...

  7. 【CF628D】Magic Numbers 数位DP

    [CF628D]Magic Numbers 题意:求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数(这里的偶数位是的是从高位往低位数的偶数位).$a,b<10^{2 ...

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

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

  9. CodeForces 628 D Magic Numbers 数位DP

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

随机推荐

  1. Codeforces Round #266 (Div. 2)B(暴力枚举)

    很简单的暴力枚举,却卡了我那么长时间,可见我的基本功不够扎实. 两个数相乘等于一个数6*n,那么我枚举其中一个乘数就行了,而且枚举到sqrt(6*n)就行了,这个是暴力法解题中很常用的性质. 这道题找 ...

  2. len(),range()函数

    len()函数返回字符串.列表.字典.元组等长度 eg1:计算字符串的长度: >>>s='hello good boy doiido' >>>len(s) > ...

  3. Mac安装SSHFS挂载远程服务器上的文件夹到本地

    一.安装SSHFUS sshfs依赖于fuse,所以需要先安装fuse,这两个软件都可以在https://osxfuse.github.io/下载到. 注意安装顺序. 二.挂载文件夹到本地 输入一下命 ...

  4. POJ2411Mondriaan's Dream(DP+状态压缩 or 插头DP)

    问题: Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after prod ...

  5. New Year and Buggy Bot

    Bob programmed a robot to navigate through a 2d maze. The maze has some obstacles. Empty cells are d ...

  6. 【LeetCode】001. TwoSum

    题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...

  7. 【转】深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...

  8. Mesos-slave启动处理记录

    1. work_dir错误导致启动异常 /etc/mesos-slave/work_dir设置的目录不存在或者权限不够将会导致启动异常. 2. 根据日志信息以及status信息来判断问题 通过serv ...

  9. python爬虫彩票案例,并自动发微信

    import requests from bs4 import BeautifulSoup import itchat import time,datetime all = [{1, 2, 3, 7, ...

  10. JavaScript函数的默认参数(default parameter)

    JavaScript函数的默认参数(default parameter) js函数参数的默认值都是undefined, ES5里,不支持直接在形参里写默认值.所以,要设置默认值,就要检测参数是否为un ...