码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 4421: [Cerc2015] Digit Division

时间:2016-06-07 14:39:19      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

4421: [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

Sample Output

4
—————以下题解—————
首先,分出来的第一段必须%m=0(这是显然的)
f[i]为1~i的数值,判断(i,j)这一段是否可行(f[i]-f[j-1]*10k)%m==0,我们在第一段的基础上进行扩展,而且题目要求每一段都满足要求,所以f[j-1]%m=0,f[i]%m=0
由此可以得出结论,断点必为f[i]%m==0的点(不含最后)
最后答案就是2断点数,再特判一下就行了。
#include<stdio.h>
#include<iostream>
using namespace std;
const int M=1e9+7;
const int N=300005;
char s[N];
int x,i,n,m,ans;
int main()
{
    scanf("%d%d",&n,&m);
    scanf("%s",s+1);
    ans=1;
    for(i=1;i<=n;i++)
    {
        x=(x*10+s[i]-0)%m;
        if(x==0&&i<n) ans=ans*2%M;
    }
    if(x) ans=0;
    cout<<ans;
    return 0;
}

 

bzoj 4421: [Cerc2015] Digit Division

标签:

原文地址:http://www.cnblogs.com/lwq12138/p/5566632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!