zoukankan      html  css  js  c++  java
  • HDU 4389 数位dp

    X mod f(x)

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2992    Accepted Submission(s): 1171


    Problem Description
    Here is a function f(x):
       int f ( int x ) {
        if ( x == 0 ) return 0;
        return f ( x / 10 ) + x % 10;
       }

       Now, you want to know, in a given interval [A, B] (1 <= A <= B <= 109), how many integer x that mod f(x) equal to 0.
     
    Input
       The first line has an integer T (1 <= T <= 50), indicate the number of test cases.
       Each test case has two integers A, B.
     
    Output
       For each test case, output only one line containing the case number and an integer indicated the number of x.
     
    Sample Input
    2 1 10 11 20
     
    Sample Output
    Case 1: 10 Case 2: 3
     
    Author
    WHU
     
    Source
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <algorithm>
     6 #include <stack>
     7 #include <queue>
     8 #include <cmath>
     9 #include <map>
    10 #define ll  __int64
    11 #define dazhi 2147483647
    12 #define bug() printf("!!!!!!!")
    13 #define M 100005
    14 using namespace  std;
    15 int bit[10];
    16 int dp[10][82][82][82];
    17 int  n;
    18 int  functi(int pos,int mod,int xx ,int sum,bool flag)
    19 {
    20     if(pos==0) return (xx==sum&&mod%sum==0);
    21     if(flag&&dp[pos][mod][xx][sum]!=-1) return dp[pos][mod][xx][sum];
    22     ll x=flag ? 9 : bit[pos];
    23     ll ans=0;
    24     for(ll i=0;i<=x;i++)
    25     ans+=functi(pos-1,(mod*10+i)%xx,xx,sum+i,flag||i<x);
    26     if(flag)
    27         dp[pos][mod][xx][sum]=ans;
    28     return ans;
    29 }
    30 int  fun(int x)
    31 {
    32     int len=0;
    33     while(x)
    34     {
    35         bit[++len]=x%10;
    36         x/=10;
    37     }
    38     ll re=0;
    39     for(int i=1;i<=81;i++)
    40         re+=functi(len,0,i,0,0);
    41     return re;
    42 }
    43 int main()
    44 {
    45    int t;
    46    int  l,r;
    47    while(scanf("%d",&t)!=EOF)
    48    {
    49        memset(dp,-1,sizeof(dp));
    50        for(int i=1;i<=t;i++)
    51        {
    52            scanf("%d %d",&l,&r);
    53            int exm=fun(r);
    54            printf("Case %d: %d
    ",i,exm-fun(l-1));
    55        }
    56    }
    57     return 0;
    58 }
  • 相关阅读:
    快速幂
    某年元宵节大礼包 矩阵快速幂
    HDU 3303 Harmony Forever 前缀和+树状数组||线段树
    HDU 4325 Flowers 树状数组+离散化
    11、【设计模式】构建器模式
    【基础】数据类型
    【Mybatis】Mybatis缓存
    【FTP】FTP(文件传输协议)工作原理(SFTP)
    Docker是什么
    【RabbitMQ】使用RabbitMQ实现延迟任务
  • 原文地址:https://www.cnblogs.com/hsd-/p/6597263.html
Copyright © 2011-2022 走看看