- 1#include
- 2#include
- 3#include
- 4#include
- 5#include 6#include
- 7#include
- 8#include
- 9#include
- 10 #definell __int6411 #definemod 100000000712 #definedazhi 214748364713 #definebug() printf("!!!!!!!")14 #defineM 10000515 using namespace std;
- 16ll bit[100];
- 17ll dp[100][5][13];
- 18 ll n;
- 19ll functi(intpos,ll pre,intflag ,int m)
- 20 {
- 21 if(pos==0)return(pre==2&&m==0);
- 22 if(flag&&dp[pos][pre][m]!=-1)return dp[pos][pre][m];
- 23ll x=flag9 : bit[pos];
- 24ll ans=0;
- 25 for(ll i=0;i<=x;i++)
- 26 {
- 27 if(pre==2||(pre==1&&i==3))
- 28ans+=functi(pos-1,2,flag||i10+i)%13);
- 29 else if(i==1)
- 30ans+=functi(pos-1,1,flag||i10+i)%13);
- 31 else
- 32ans+=functi(pos-1,0,flag||i10+i)%13);
- 33 }
- 34 returndp[pos][pre][m]=ans;
- 35 }
- 36 ll fun(ll x)
- 37 {
- 38memset(dp,-1,sizeof(dp));
- 39memset(bit,0,sizeof(bit));
- 40 intlen=0;
- 41 while(x)
- 42 {
- 43bit[++len]=x%10;
- 44x/=10;
- 45 }
- 46 returnfuncti(len,0,0,0);
- 47 }
- 48 int main()
- 49 {
- 50 while(scanf("%I64d",&n)!=EOF)
- 51 {
- 52printf("%I64d\n",fun(n));
- 53 }
- 54 return 0;
- 55}
来源: http://www.bubuko.com/infodetail-1990766.html