zoukankan      html  css  js  c++  java
  • Loj10166 数字游戏2

    题目描述

    由于科协里最近真的很流行数字游戏,某人又命名了一种取模数,这种数字必须满足各位数字之和 modN 为 000。现在大家又要玩游戏了,指定一个整数闭区间 [a,b][a,b][a,b],问这个区间内有多少个取模数。

    枚举每一位,记录每一次枚举%n的余数,当枚举完时,如果余数是0,就+1,否则+0.

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstdlib>
    #include <cstring>
    #define in(a) a=read()
    #define REP(i,k,n)  for(int i=k;i<=n;i++)
    using namespace std;
    inline int read(){
        int x=0,f=1;
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar())
            if(ch=='-')
                f=-1;
        for(;isdigit(ch);ch=getchar())
            x=x*10+ch-'0';
        return x*f;
    }
    int a,b,n,digit[105],dp[105][300],ind;
    inline int dfs(int pos,int state,bool flag){
        if(!pos)  return state==0;
        if(!flag && dp[pos][state]!=-1)  return dp[pos][state];
        int up,ans=0;
        if(flag)  up=digit[pos];
        else  up=9;
        REP(i,0,up)
            ans+=dfs(pos-1,(state+i)%n,flag && i==digit[pos]);
        if(!flag)  dp[pos][state]=ans;
        return ans;
    }
    inline int solve(int x){
        ind=0;
        while(x){
            digit[++ind]=x%10;
            x/=10;
        }
        digit[ind+1]=-1;
        return dfs(ind,0,1);
    }
    int main(){
        while(scanf("%d%d%d",&a,&b,&n)!=EOF){
            memset(dp,-1,sizeof(dp));
            printf("%d
    ",solve(b)-solve(a-1));
        }
    }
        
  • 相关阅读:
    线段树【加强】
    ATM(BZOJ 1179)
    Trick or Treat on the Farm
    欧拉回路 HDU
    无序字母对(luogu 1314)
    MooFest
    Snowflake Snow Snowflakes(POJ 3349)
    Firetruck(UVA 208)
    B进制星球(luogu 1604)
    遍历一个树的所有子节点,画出该树,深度不定,广度不定,适用于任何树,深度优先算法
  • 原文地址:https://www.cnblogs.com/jason2003/p/9852604.html
Copyright © 2011-2022 走看看