Advertisement
jeff69

Untitled

Aug 5th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. /*
  3. WAY TO CANDIDATE MASTER
  4. */
  5. using namespace std;
  6. typedef long long ll;
  7. typedef long double ld;
  8.  
  9. const int MX=2e5+4;;
  10.  
  11. vector<bool> ar;
  12. int n;
  13. int p;
  14. ll pr(int x)
  15. {
  16. if(x==0)return 1;
  17. return 2*pr(x-1);
  18. }
  19. ll fu(int x)
  20. {
  21. ll ret=1;
  22. for(int i=n-1;i>=x;i--)
  23. if(ar[i])
  24. ret+=pr(n-1-i);
  25. return ret;
  26. }
  27. ll dp[100][2][2];
  28. ll solve(int x,bool f,bool le)
  29. {
  30. ll ans=0;
  31. if(x==n)
  32. return 0;
  33. if(dp[x][f][le]!=-1)return dp[x][f][le];
  34. if(f)
  35. {
  36. if(ar[x])
  37. {
  38. ans+=le*fu(x+1)+solve(x+1,1,1);
  39. ans+=solve(x+1,0,0);
  40. }
  41. else
  42. {
  43. ans+=solve(x+1,1,0);
  44. }
  45. return ans;
  46. }
  47. ans+=le*(1<<(n-x)-1)+solve(x+1,0,1);
  48. // cout<<n<<' '<<x<<' '<<(1<<(n-x)-1)<<endl;
  49. ans+=solve(x+1,0,0);
  50. dp[x][f][le]=ans;
  51.  
  52. return ans;
  53. }
  54. int main()
  55. {
  56. int t;int g=0;
  57. scanf("%d",&t);
  58. while(t--){
  59. int tem;
  60. cin>>tem;
  61. g++;
  62. memset(dp,-1,sizeof dp);
  63.  
  64. ar.clear();
  65. while(tem)
  66. {
  67. ar.push_back(tem%2);
  68. tem/=2;
  69. }
  70.  
  71. reverse(ar.begin(),ar.end());
  72. n=ar.size();
  73.  
  74. printf("Case %d: %lld\n",g,solve(0,1,0));
  75. }
  76. return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement