Advertisement
farsid

Untitled

Jul 30th, 2012
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1.  
  2. //package main;
  3. import java.util.Scanner;
  4. import java .math.BigInteger;
  5.  
  6.  
  7. class B
  8. {
  9. int q;
  10. int N[]=new int[70];
  11. BigInteger DP[][][][]=new BigInteger[3][3][70][70];
  12.  
  13. public B()
  14. {
  15. q=0;
  16. for(int i=0;i<70;i++)N[i]=-1;
  17. for(int i=0;i<3;i++)
  18. {
  19. for(int j=0;j<3;j++)
  20. for(int k=0;k<64;k++)
  21. for(int l=0;l<64;l++)DP[i][j][k][l]= BigInteger.valueOf(-1);
  22. }
  23. }
  24. public int val_q()
  25. {return q;}
  26. public void SET_N(int a)
  27. {
  28. N[q++]=a;
  29. }
  30. public void P(BigInteger A)
  31. {
  32. System.out.println(A);
  33. }
  34. public void reset(int i,int j)
  35. {
  36. if(i>=j)return;
  37.  
  38. int t=N[i];
  39. N[i]=N[j];
  40. N[j]=t;
  41. reset(i+1,j-1);
  42. }
  43. public BigInteger solve (int state,int lst_bit,int len,int count)
  44. {
  45. //P(DP[state][lst_bit][len][count]);
  46. if(DP[state][lst_bit][len][count].compareTo(DP[0][2][57][37])!=0)return DP[state][lst_bit][len][count];
  47.  
  48. if(N[len]==-1)return BigInteger.valueOf(count);
  49.  
  50. if(state==1)
  51. {
  52. if(N[len]==0)
  53. {
  54. DP[state][lst_bit][len][count]=solve(1,0,len+1,count);
  55. //P(DP[state][lst_bit][len][count]);
  56. }
  57. else
  58. {
  59. if(lst_bit==1)DP[state][lst_bit][len][count]=solve(1,1,len+1,count+1).add(solve(0,0,len+1,count));
  60. else DP[state][lst_bit][len][count]=solve(1,1,len+1,count).add(solve(0,0,len+1,count));
  61. //P(DP[state][lst_bit][len][count]);
  62. }
  63. }
  64. else
  65. {
  66. if(lst_bit==1)DP[state][lst_bit][len][count]=solve(0,1,len+1,count+1).add(solve(0,0,len+1,count));
  67. else DP[state][lst_bit][len][count]=solve(0,1,len+1,count).add(solve(0,0,len+1,count));
  68. }
  69.  
  70.  
  71. return DP[state][lst_bit][len][count];
  72. }
  73. public void print()
  74. {
  75. for(int i=0;i<q;i++)System.out.print(N[i]);
  76. System.out.println();
  77. }
  78.  
  79. }
  80.  
  81. class Main {
  82.  
  83.  
  84. public static void main(String[] args) {
  85. int T,cas;
  86. long n;
  87. Scanner in= new Scanner(System.in);
  88. //T=in.nextInt();
  89. for(cas=1;;cas++)
  90. {
  91. n=in.nextLong();
  92. if(n<0)break;
  93. if(n<3)
  94. {
  95. System.out.printf("Case %d: %d\n",cas, 0);
  96. continue;
  97. }
  98. B S=new B();
  99. while(n!=0)
  100. {
  101. S.SET_N((int)n%2);
  102. n/=2;
  103. }
  104. S.reset(0,S.val_q()-1);
  105. //S.print();
  106. BigInteger A=S.solve(1, 0, 0,0);
  107. System.out.printf("Case %d: ", cas);
  108. System.out.println(A);
  109. }
  110.  
  111. }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement