The5threic1-1

Chiika-1st

Aug 3rd, 2024 (edited)
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | Source Code | 0 0
  1. #include<bits/stdc++.h>
  2. #define endl '\n'
  3. using namespace std;
  4. #ifdef  ONLINE_JUDGE
  5.     #define eprintf(...) 42
  6. #else
  7.         #define eprintf(...) {fprintf(stderr, __VA_ARGS__);fflush(stderr);}
  8. #endif
  9. clock_t startTime;
  10. double getCurrentTime()
  11. {
  12.     return (double)(clock() - startTime) / CLOCKS_PER_SEC;
  13. }
  14. string lo, hi;
  15. long long dp[21][165][2][2];
  16. long long digit_dp(int level, int tar, bool lo_lim, bool hi_lim)
  17. {
  18.     if(tar<0)
  19.     {
  20.         return 0;
  21.     }
  22.     if(level==19)
  23.     {
  24.         return (tar==0);
  25.     }
  26.     if(dp[level][tar][lo_lim][hi_lim]!=-1)
  27.     {
  28.         return dp[level][tar][lo_lim][hi_lim];
  29.     }
  30.     int l=0, r=9;
  31.     long long ans = 0;
  32.     if(lo_lim)
  33.     {
  34.         l = lo[level]-'0';
  35.     }      
  36.     if(hi_lim)
  37.     {
  38.         r = hi[level]-'0';
  39.     }
  40.     for(int i=l; i<=r; i++)
  41.     {
  42.         bool l1, l2;
  43.         l1 = (i==lo[level]-'0' && lo_lim);
  44.         l2 = (i==hi[level]-'0' && hi_lim);
  45.  
  46.         ans += digit_dp(level+1, tar-i, l1, l2);
  47.     }
  48.     return dp[level][tar][lo_lim][hi_lim] = ans;
  49. }
  50. vector<long long> solve(long long l, long long r)
  51. {
  52.     memset(dp, -1, sizeof(dp));
  53.     lo = to_string(l); hi = to_string(r);
  54.     reverse(lo.begin(), lo.end());  reverse(hi.begin(), hi.end());
  55.     while(lo.size()<19)
  56.     {
  57.         lo.push_back('0');
  58.     }
  59.     while(hi.size()<19)
  60.     {
  61.         hi.push_back('0');
  62.     }
  63.     reverse(lo.begin(), lo.end());  reverse(hi.begin(), hi.end());
  64.     long long ans[163] = { 0 };
  65.     long long a=-1, b=0;
  66.     for(int i=0; i<163; i++)
  67.     {
  68.         ans[i] = digit_dp(0, i, 1, 1);
  69.         if(a<ans[i])
  70.         {
  71.             a = ans[i]; b = 1;  
  72.         }
  73.         else if(a==ans[i])
  74.         {
  75.             b++;
  76.         }
  77.     }
  78.     return {a, b};
  79. }
  80. int main()
  81. {
  82.     ios::sync_with_stdio(false);
  83.     cin.tie(0);
  84.     int t;
  85.     cin>>t;
  86.     startTime = clock();
  87.     while(t--)
  88.     {
  89.         long long l, r;
  90.         cin>>l>>r;
  91.         for(auto stuff : solve(l, r))
  92.         {  
  93.             cout<<stuff<<" ";  
  94.         }
  95.         cout<<endl;
  96.     }
  97.     eprintf("time = %.5lf\n", getCurrentTime());
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment