Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- /*
- WAY TO CANDIDATE MASTER
- */
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- const int MX=2e5+4;;
- vector<bool> ar;
- int n;
- int p;
- ll pr(int x)
- {
- if(x==0)return 1;
- return 2*pr(x-1);
- }
- ll fu(int x)
- {
- ll ret=1;
- for(int i=n-1;i>=x;i--)
- if(ar[i])
- ret+=pr(n-1-i);
- return ret;
- }
- ll dp[100][2][2];
- ll solve(int x,bool f,bool le)
- {
- ll ans=0;
- if(x==n)
- return 0;
- if(dp[x][f][le]!=-1)return dp[x][f][le];
- if(f)
- {
- if(ar[x])
- {
- ans+=le*fu(x+1)+solve(x+1,1,1);
- ans+=solve(x+1,0,0);
- }
- else
- {
- ans+=solve(x+1,1,0);
- }
- return ans;
- }
- ans+=le*(1<<(n-x)-1)+solve(x+1,0,1);
- // cout<<n<<' '<<x<<' '<<(1<<(n-x)-1)<<endl;
- ans+=solve(x+1,0,0);
- dp[x][f][le]=ans;
- return ans;
- }
- int main()
- {
- int t;int g=0;
- scanf("%d",&t);
- while(t--){
- int tem;
- cin>>tem;
- g++;
- memset(dp,-1,sizeof dp);
- ar.clear();
- while(tem)
- {
- ar.push_back(tem%2);
- tem/=2;
- }
- reverse(ar.begin(),ar.end());
- n=ar.size();
- printf("Case %d: %lld\n",g,solve(0,1,0));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement