zoukankan      html  css  js  c++  java
  • Gym

    题意:输入n,m,将n分段,每一段都可以被m整除,有多少种方法。
    题解:找到n最多可以分成多少段,1段1中分法,2段2中分法,3段4种分法……计算可知若有x段则2^x-1种分法。
    注意:如果n无法被m整除,那么它有0种分法。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    char s[300010];
    const int INF = 1e9+7;
    int n,m,ans;
    int KSM(int x)
    {
        long long a,b;
        a = 1;
        b = 2;
        while(x)
        {
            if(x%2)
            {
                a *= b;
                a %= INF;
            }
            b *= b;
            b %= INF;
            x /= 2;
        }
        return a;
    }
    
    int f(int x)
    {
        if(x>=n)
            return 1;
        int i,num;
        for(i=x;i<n;i++)
        {
            num *= 10;
            num += s[i] - '0';
            num %= m;
            if(num==0)
            {
                if(f(i+1))
                {
    
                    ans++;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    int main()
    {
        int num = 0,i;
        ans = 0;
        scanf("%d%d",&n,&m);
        scanf("%s",s);
        for(i=0;i<n;i++)
        {
            num *= 10;
            num += s[i] - '0';
            num %= m;
        }
        if(num==0)
        {
            f(0);
            printf("%d
    ",KSM(ans-1));
        }
        else
            printf("0
    ");
    
        return 0;
    }
    
  • 相关阅读:
    centos 6.5 添加静态ip
    质数因子
    sizeof 和 strlen 的区别
    C++输入带空格的字符串
    字符集合
    汽水瓶
    算法汇总
    Word目录生成
    0-1背包问题的动态规划法与回溯法
    vue父元素调用子组件的方法报undefined
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9770996.html
Copyright © 2011-2022 走看看