• luoguP3413 萌数


     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e3+5;
     4 const int mod=1e9+7;
     5 int n,m,mark;
     6 char l[maxn],r[maxn];
     7 int numl,numr;
     8 int tot,e[maxn];
     9 long long c[maxn][20][2];
    10 template<class t>void red(t &x)
    11 {
    12     int w=1;
    13     x=0;
    14     char ch=getchar();
    15     while(ch>'9'||ch<'0')
    16     {
    17         if(ch=='-')
    18             w=-1;
    19         ch=getchar(); 
    20     }
    21     while(ch>='0'&&ch<='9')
    22     {
    23         x=(x<<3)+(x<<1)+ch-'0';
    24         ch=getchar();
    25     } 
    26     x*=w;
    27 } 
    28 void input()
    29 {
    30     freopen("input.txt","r",stdin);
    31 }
    32 void dv(int x)
    33 {
    34     tot=0;
    35     while(x)
    36     {
    37         e[++tot]=x%10;
    38         x/=10;
    39     }
    40     e[tot+1]=0;
    41 } 
    42 long long dfs(int pos,bool limit,bool zero,int pre,int qpre,bool dc)
    43 {
    44     if(pos==0)
    45         return dc;
    46     if(!limit&&c[pos][pre][dc]!=-1)
    47         return c[pos][pre][dc];
    48     int up=limit?e[pos]:9;
    49     long long ans=0;
    50     for(int i=0;i<=up;++i)
    51         ans+=dfs(pos-1,limit&&(i==up),zero||i,i,zero?pre:-1,dc||(i==pre&&zero)||(i==qpre&&zero))%mod;
    52     if(!limit&&zero&&qpre!=-1)
    53         c[pos][pre][dc]=ans;
    54     return ans;
    55 }
    56 long long solve()
    57 {
    58     //dv(x);
    59     tot=0;
    60     while(m--)
    61         e[++tot]=r[m]-'0';
    62     while(!e[tot])
    63         --tot; 
    64     memset(c,-1,sizeof(c));
    65     long long ans=dfs(tot,1,0,-1,-1,0)%mod; 
    66     tot=0;
    67     while(n--)
    68         e[++tot]=l[n]-'0';
    69     while(!e[tot])
    70         --tot;
    71     memset(c,-1,sizeof(c));
    72     ans-=dfs(tot,1,0,-1,-1,0)%mod;
    73     return ans;
    74 }
    75 void read()
    76 {
    77     scanf("%s%s",l,r);
    78     n=strlen(l);
    79     m=strlen(r);
    80 }
    81 void work()
    82 {
    83     int i=1;
    84     while(l[n-i]=='0'&&n>i)
    85     {
    86         l[n-i]='9';
    87         ++i;
    88     }
    89     l[n-i]-=1;
    90     printf("%lld",(solve()+mod)%mod);
    91 }
    92 int main()
    93 {
    94     //input();
    95     read();
    96     work();
    97     return 0;
    98 }
    View Code
  • 相关阅读:
    【BIGEMAP一键离线地图服务】
    android 应用签名的作用
    UniPush使用指南
    Android平台云端打包证书使用说明
    Android平台签名证书(.keystore)生成指南
    时序数据库技术体系-时序数据存储模型设计(原理)
    时序数据库技术体系 – 初识InfluxDB(原理)
    Influxdb原理详解
    jquery.easing 和 jquery.transit 动画插件的使用
    vue 移动端日期选择组件 vue-mobile-calendar
  • 原文地址:https://www.cnblogs.com/Achensy/p/11002149.html
Copyright © 2020-2023  润新知