Advertisement
Guest User

GFG Code India Code

a guest
Mar 6th, 2022
638
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4. typedef long long ll;
  5. #define pb push_back
  6. #define ff first
  7. #define ss second
  8. const int N=3e5+7;
  9. const int mod=1e9+7;
  10. const double eps=1e-6;
  11. const double pi=   3.14159265358979323846;
  12. using namespace std;  
  13. using namespace __gnu_pbds;
  14. typedef tree<int, null_type, less_equal<int>, rb_tree_tag,
  15.              tree_order_statistics_node_update>
  16.     op_set;
  17.  
  18. ll dp[20][2][2][2][2][2][2][3][5][7][2][3][2];
  19. ll recursion(int pos,int small,int two,int three,int five,int seven,int mod2,int mod3,int mod5,int mod7, int zero , int sumg1 ,int start ,string &curr)
  20. {
  21.    if(pos==curr.size())
  22.    {
  23.       if(start==1)
  24.             return 0ll;
  25.       if(zero==1)
  26.             return sumg1==2;
  27.       if(two==1 && mod2==0)
  28.             return 1ll;
  29.       if(three==1 && mod3==0)
  30.             return 1ll;
  31.       if(five==1 && mod5==0)
  32.             return 1ll;
  33.       if(seven==1 && mod7==0)
  34.             return 1ll;
  35.       return 0ll;
  36.    }
  37.  
  38.    ll &val=dp[pos][small][two][three][five][seven][mod2][mod3][mod5][mod7][zero][sumg1][start];
  39.    if(val!=-1)
  40.          return val;
  41.    val=0;
  42.  
  43.    if(start==1)
  44.          val=recursion(pos+1,1,two,three,five,seven,mod2,mod3,mod5,mod7,zero,sumg1,1,curr);
  45.  
  46.    for(int i=start;i<=9;i++)
  47.    {
  48.       int n2=two;
  49.       int n3=three;
  50.       int n5=five;
  51.       int n7=seven;
  52.       int n0=zero;
  53.  
  54.       if(i==0)
  55.             n0=1;
  56.       if(i%2==0 && i!=0)
  57.             n2=1;
  58.       if(i%3==0 && i!=0)
  59.             n3=1;
  60.       if(i%5==0 && i!=0)
  61.             n5=1;
  62.       if(i%7==0 && i!=0)
  63.             n7=1;
  64.  
  65.       int k=i*i*i*i;
  66.       int nsumg1=sumg1;
  67.  
  68.       if(k>1)
  69.             nsumg1=2;
  70.       else if(nsumg1!=2 && k==1)
  71.             nsumg1++;
  72.  
  73.       if(small==1 || i<curr[pos]-'0')
  74.             val+=recursion(pos+1,1,n2,n3,n5,n7,(mod2+k)%2,(mod3+k)%3,(mod5+k)%5,(mod7+k)%7,n0,nsumg1,0,curr);
  75.       else if(i==curr[pos]-'0')
  76.             val+=recursion(pos+1,0,n2,n3,n5,n7,(mod2+k)%2,(mod3+k)%3,(mod5+k)%5,(mod7+k)%7,n0,nsumg1,0,curr);
  77.    }
  78.    return val;
  79. }
  80.  
  81. int32_t main()
  82. {
  83.    ios_base::sync_with_stdio(false);
  84.    cin.tie(0);
  85.  
  86.    int t;
  87.    cin >> t;
  88.    while(t--)
  89.    {
  90.       string s;
  91.       cin >> s;
  92.  
  93.       memset(dp,-1,sizeof(dp));
  94.       ll ans=recursion(0,0,0,0,0,0,0,0,0,0,0,0,1,s);
  95.       cout << ans << "\n";
  96.    }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement