首页 > 代码库 > 【BZOJ4421】[Cerc2015] Digit Division 动态规划
【BZOJ4421】[Cerc2015] Digit Division 动态规划
【BZOJ4421】[Cerc2015] Digit Division
Description
给出一个数字串,现将其分成一个或多个子串,要求分出来的每个子串能Mod M等于0.
将方案数(mod 10^9+7)
Input
给出N,M,其中1<=N<=300 000,1<=M<=1000 000.
接下来一行,一个数字串,长度为N。
Output
如题
Sample Input
4 2
1246
1246
Sample Output
4
题解:如果一个前缀a%m==0,另一个长一点的前缀b%m==0,那么他们的中间部分(b-a*10^i)%m一定也是0,那就相当于我们每搜到一个前缀为0的位置就可以把这个串从这里切开,那么如果原串有n个前缀%m==0,显然除了最后一个必须切以外,每个前缀我们可以选择切或不切,答案就是2^n
不要比谁的代码长度短了!!!
#include <cstdio>int n,m,sum,ans,j;char str[300010];int main(){ scanf("%d%d%s",&n,&m,str),ans=1; while(str[j]) sum=(sum*10+str[j]-‘0‘)%m,ans=(!sum&&str[j+1])?(ans*2%1000000007):ans,j++; printf("%d",(!sum)?ans:0); return 0;}
【BZOJ4421】[Cerc2015] Digit Division 动态规划
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。