4421: [Cerc2015] Digit Division|组合数学

找出所有 modm=0 的区间的个数,再每两个区间之间都可以分开这个串
假设区间数为 n 最后答案就是

Cn10+Cn11+...Cn1n1=2n1
最后特判一下有没有解

#include<bits/stdc++.h>
#define p 1000000007
using namespace std;
char s[300001];
int n,m,ans,now;
int main()
{
    scanf("%d%d%s",&n,&m,s);
    for(int i=0;i<n;i++)
    {
        now=(now*10+s[i]-'0')%m;
        if(!now)ans=(ans==0?1:ans*2%p);
    }
    now?puts("0"):printf("%d",ans);
}

你可能感兴趣的:(组合数学)