Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //package main;
- import java.util.Scanner;
- import java .math.BigInteger;
- class B
- {
- int q;
- int N[]=new int[70];
- BigInteger DP[][][][]=new BigInteger[3][3][70][70];
- public B()
- {
- q=0;
- for(int i=0;i<70;i++)N[i]=-1;
- for(int i=0;i<3;i++)
- {
- for(int j=0;j<3;j++)
- for(int k=0;k<64;k++)
- for(int l=0;l<64;l++)DP[i][j][k][l]= BigInteger.valueOf(-1);
- }
- }
- public int val_q()
- {return q;}
- public void SET_N(int a)
- {
- N[q++]=a;
- }
- public void P(BigInteger A)
- {
- System.out.println(A);
- }
- public void reset(int i,int j)
- {
- if(i>=j)return;
- int t=N[i];
- N[i]=N[j];
- N[j]=t;
- reset(i+1,j-1);
- }
- public BigInteger solve (int state,int lst_bit,int len,int count)
- {
- //P(DP[state][lst_bit][len][count]);
- if(DP[state][lst_bit][len][count].compareTo(DP[0][2][57][37])!=0)return DP[state][lst_bit][len][count];
- if(N[len]==-1)return BigInteger.valueOf(count);
- if(state==1)
- {
- if(N[len]==0)
- {
- DP[state][lst_bit][len][count]=solve(1,0,len+1,count);
- //P(DP[state][lst_bit][len][count]);
- }
- else
- {
- if(lst_bit==1)DP[state][lst_bit][len][count]=solve(1,1,len+1,count+1).add(solve(0,0,len+1,count));
- else DP[state][lst_bit][len][count]=solve(1,1,len+1,count).add(solve(0,0,len+1,count));
- //P(DP[state][lst_bit][len][count]);
- }
- }
- else
- {
- if(lst_bit==1)DP[state][lst_bit][len][count]=solve(0,1,len+1,count+1).add(solve(0,0,len+1,count));
- else DP[state][lst_bit][len][count]=solve(0,1,len+1,count).add(solve(0,0,len+1,count));
- }
- return DP[state][lst_bit][len][count];
- }
- public void print()
- {
- for(int i=0;i<q;i++)System.out.print(N[i]);
- System.out.println();
- }
- }
- class Main {
- public static void main(String[] args) {
- int T,cas;
- long n;
- Scanner in= new Scanner(System.in);
- //T=in.nextInt();
- for(cas=1;;cas++)
- {
- n=in.nextLong();
- if(n<0)break;
- if(n<3)
- {
- System.out.printf("Case %d: %d\n",cas, 0);
- continue;
- }
- B S=new B();
- while(n!=0)
- {
- S.SET_N((int)n%2);
- n/=2;
- }
- S.reset(0,S.val_q()-1);
- //S.print();
- BigInteger A=S.solve(1, 0, 0,0);
- System.out.printf("Case %d: ", cas);
- System.out.println(A);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement