zoukankan      html  css  js  c++  java
  • hdu 3652 B-number

    题目要求的是求出1~n里能被13整除且含有“13"的数字的个数。。。

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <cstring>
     4 using namespace std;
     5 int dp[15][10][14][3],md[15]={
     6     0,1
     7 };
     8 void init()
     9 {
    10     for(int i=2;i<11;i++)
    11         md[i]=(md[i-1]*10)%13;
    12     memset(dp,0,sizeof(dp));
    13     for(int i=0;i<10;i++)
    14         dp[1][i][i][0]=1;
    15     dp[1][3][3][1]=1;
    16     for(int i=2;i<11;i++)
    17     for(int j=0;j<13;j++)
    18     for(int k=0;k<13;k++){
    19         dp[i][j][k][0]=0;
    20         dp[i][j][k][1]=0;
    21         dp[i][j][k][2]=0;
    22         int tmp=(j*md[i])%13;
    23         for(int j0=0;j0<10;j0++){
    24                 
    25                 dp[i][j][k][0]+=dp[i-1][j0][(13+k-tmp)%13][0];
    26                 if(j==1&&j0==3)
    27                     dp[i][j][k][0]-=dp[i-1][j0][(13+k-tmp)%13][1];
    28                 dp[i][j][k][2]+=dp[i-1][j0][(13+k-tmp)%13][2];
    29                 if(j==1&&j0==3)
    30                     dp[i][j][k][2]+=dp[i-1][3][(13+k-tmp)%13][1];
    31                 if(j==3)
    32                 dp[i][j][k][1]=dp[i][j][k][1]+dp[i-1][j0][(13+k-tmp)%13][0];
    33         }
    34     }    
    35 }
    36 int solve(int x)
    37 {
    38     int ans=0,dig[15],flag=0,cnt=0;
    39     while(x){
    40         dig[++cnt]=x%10;
    41         x/=10;
    42     }
    43     int pre=0,tmp;
    44     dig[cnt+1]=0;
    45     for(int i=cnt;i>=1;i--){
    46         pre=(pre+dig[i+1]*md[i+1])%13;
    47         for(int j=0;j<dig[i];j++){
    48             if(flag)
    49                 ans+=dp[i][j][(13-pre)%13][0];    
    50             ans+=dp[i][j][(13-pre)%13][2];
    51             if(j==3&&dig[i+1]==1&&flag==0)
    52             ans+=dp[i][j][(13-pre)%13][1];
    53         }
    54         if(dig[i]==3&&dig[i+1]==1)
    55             flag=1;
    56     }
    57     return ans;
    58 }
    59 int main()
    60 {
    61     init();
    62     int n;
    63     while(~scanf("%d",&n))
    64         printf("%d
    ",solve(n+1));
    65     return 0;
    66 }
    AC Code
  • 相关阅读:
    WordCount的程序设计没写出来怎么办
    小程序分析
    程序单元测试
    Visual studio 2013安装
    四则运算源代码
    在VC环境下执行代码出现错误
    微点评微信软件
    软件工程学习
    查找抄袭文章
    软件附加题简答
  • 原文地址:https://www.cnblogs.com/kim888168/p/3252755.html
Copyright © 2011-2022 走看看