Advertisement
Saleh127

Light OJ 1140 / Digit DP

Sep 8th, 2022
783
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.50 KB | None | 0 0
  1. /***
  2.  created: 2022-09-07-23.20.28
  3. ***/
  4.  
  5. #include <bits/stdc++.h>
  6. #include <ext/pb_ds/assoc_container.hpp>
  7. #include <ext/pb_ds/tree_policy.hpp>
  8. using namespace std;
  9. using namespace __gnu_pbds;
  10. template<typename U> using ordered_set=tree<U, null_type,less<U>,rb_tree_tag,tree_order_statistics_node_update>;
  11. #define ll long long
  12. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  13. #define get_lost_idiot return 0
  14. #define nl '\n'
  15.  
  16. ll dp[13][13][2][2];
  17.  
  18. vector<ll>digit;
  19.  
  20. ll solve(ll in,ll cnt,bool start, bool f)
  21. {
  22.     if(in==digit.size())
  23.     {
  24.         return cnt;
  25.     }
  26.  
  27.     if(dp[in][cnt][start][f]!=-1) return dp[in][cnt][start][f];
  28.  
  29.     ll ans=0;
  30.     ll lim;
  31.  
  32.     if(f) lim=9;
  33.     else lim=digit[in];
  34.  
  35.     for(ll i=0; i<=lim; i++)
  36.     {
  37.         ans+=solve(in+1, cnt + (i==0 && start), start || (i!=0), f ||(i<lim));
  38.     }
  39.  
  40.     return dp[in][cnt][start][f]=ans;
  41. }
  42.  
  43. ll init(ll b)
  44. {
  45.     digit.clear();
  46.     memset(dp,-1,sizeof dp);
  47.     while(b)
  48.     {
  49.         digit.push_back(b%10);
  50.         b/=10;
  51.     }
  52.     reverse(digit.begin(),digit.end());
  53.  
  54.     return solve(0,0,0,0);
  55. }
  56.  
  57.  
  58. int main()
  59. {
  60.     ios_base::sync_with_stdio(0);
  61.     cin.tie(0);
  62.     cout.tie(0);
  63.  
  64.     test
  65.     {
  66.         ll n,m,i,a,b,ans;
  67.  
  68.         cin>>a>>b;
  69.  
  70.         init(b);
  71.  
  72.         ans=solve(0,0,0,0);
  73.  
  74.         if(a==0) ans++;
  75.  
  76.         a=max(0ll,a-1);
  77.  
  78.         init(a);
  79.  
  80.         ans = ans - solve(0,0,0,0);
  81.  
  82.         cout<<"Case "<<cs<<": "<<ans<<nl;
  83.     }
  84.  
  85.     get_lost_idiot;
  86. }
  87.  
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement