Advertisement
saquib2508

LOJ 1021 Painful Bases

Jun 8th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<bits/stdc++.h>
  2. #define ffr(i,a,b) for(i=a;i<b;i++)
  3. #define mm(a,b) memset(a,b,sizeof(a))
  4. #define pb push_back
  5. #define ll long long
  6. #define zeroat(a,b) !(a & (1<<b))
  7. #define set(a,b) a|(1<<b)
  8.  
  9. using namespace std;
  10. int b, k, n;
  11. string s;
  12.  
  13. ll dp[65600][23];
  14. int limit;
  15.  
  16. int val(char a)
  17. {
  18.     if('0'<= a && a<='9') return a-'0';
  19.     else return a-'A'+10;
  20. }
  21.  
  22. ll call(int mask, int rem)
  23. {
  24.     if(mask==limit) return (!rem);
  25.     if(dp[mask][rem]!=-1) return dp[mask][rem];
  26.     ll ret=0;
  27.     int i;
  28.     ffr(i,0,n)
  29.     {
  30.         if(zeroat(mask,i))
  31.         ret+=call( set(mask,i) , ( rem*b+val(s[i]) ) %k );
  32.     }
  33.     dp[mask][rem]=ret;
  34.     return ret;
  35. }
  36.  
  37. int main()
  38. {
  39.     int cc=1, t;
  40.     cin >> t;
  41.     while(t--)
  42.     {
  43.         mm(dp,-1);
  44.         cin >> b >> k >> s;
  45.         n=s.size();
  46.         limit=(1<<n)-1;
  47.         ll ans=call(0,0);
  48.         printf("Case %d: %lld\n", cc++, ans);
  49.     }
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement