bzoj 4421: [Cerc2015] Digit Division

Posted lwq12138

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 4421: [Cerc2015] Digit Division相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

bzoj 4451 : [Cerc2015]Frightful Formula FFT

BZOJ4452[Cerc2015]Export Estimate 并查集

BZOJ 4451: [Cerc2015]Frightful Formula

「BZOJ 4451」「CERC 2015」Frightful Formula

bzoj4435: [Cerc2015]Juice Junctions(最小割树+hash)

BZOJ 4421 Digit Division