首页 > 其他 > 详细

bzoj 4421: [Cerc2015] Digit Division

时间:2016-06-07 14:39:14      阅读:142      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!