Advertisement
Guest User

bignum

a guest
Aug 18th, 2015
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. int a=9<<9e9;
  2.  
  3. #include<iostream>
  4. using namespace std;
  5.  
  6. class S
  7. {
  8. public:
  9. virtual bool next()=0;
  10. virtual S *dup()=0;
  11. virtual S *max()=0;
  12. virtual void dump()=0;
  13. };
  14.  
  15. int length(S **list)
  16. {
  17. if(!list)
  18. {
  19. return 0;
  20. }
  21. int i;
  22. for(i=0;list[i]!=0;++i);
  23. return i;
  24. }
  25.  
  26. class S0 : public S
  27. {
  28. public:
  29. int i;
  30. virtual bool next(){return --i>0;}
  31. virtual S *dup()
  32. {
  33. S0 *s=new S0();
  34. s->i=i;
  35. return (S*)s;
  36. }
  37. virtual S *max()
  38. {
  39. S0 *s=new S0();
  40. s->i=a;
  41. return (S*) s;
  42. }
  43. virtual void dump()
  44. {
  45. cout<<i;
  46. }
  47. };
  48.  
  49. class S1 : public S
  50. {
  51. public:
  52. S *value;
  53. S *rank;
  54. S** list;
  55.  
  56. virtual bool next()
  57. {
  58. if(!list)
  59. {
  60. return value->next();
  61. }
  62. int i;
  63. for(i=0;list[i] && !list[i]->next();++i)
  64. {
  65. list[i]=list[i]->max();
  66. }
  67. if(list[i]==0)
  68. {
  69. return value->next();
  70. }
  71. return true;
  72. }
  73.  
  74. virtual S *dup()
  75. {
  76. S1 *s=new S1();
  77. s->value=value->dup();
  78. s->rank=rank->dup();
  79. s->list=0;
  80. if(list)
  81. {
  82. int l=length(list);
  83. s->list=new S *[l+1];
  84. for(int i=0;i<l;++i)
  85. {
  86. s->list[i]=list[i]->dup();
  87. }
  88. s->list[l]=0;
  89. }
  90. return (S *)s;
  91. }
  92.  
  93. virtual S *max()
  94. {
  95. S1 *s=new S1();
  96. s->value=value->max();
  97. s->rank=rank->dup();
  98. s->list=new S *[a+1];
  99. for(int i=0;i<a;++i)
  100. {
  101. s->list[i]=list[i]->max();
  102. }
  103. s->list[a]=0;
  104. return (S *)s;
  105. }
  106.  
  107. virtual void dump()
  108. {
  109. cout<<"$(";
  110. value->dump();
  111. cout<<")";
  112. cout<<"<";
  113. rank->dump();
  114. cout<<">";
  115. if(list)
  116. {
  117. cout<<"[";
  118. for(int i=0;list[i]!=0;i++)
  119. {
  120. list[i]->dump();
  121. cout<<",";
  122. }
  123. cout<<"]";
  124. }
  125. }
  126. };
  127.  
  128. S *generate(S *x,S *rank)
  129. {
  130. S1 *s=new S1();
  131. s->value=x->dup();
  132. s->rank=rank->dup();
  133. S *r=rank->dup();
  134. bool n=r->next();
  135. if(!n)
  136. {
  137. s->list=0;
  138. }
  139. else
  140. {
  141. s->list=new S *[a+1];
  142. for(int i=0;i<a;++i)
  143. {
  144. s->list[i]=generate(x,r);
  145. }
  146. s->list[a]=0;
  147. }
  148. return s;
  149. }
  150.  
  151. S *generate2()
  152. {
  153. S0 s0;
  154. S *s=generate(s0.max(),s0.max());
  155. for(int i=0;i<a;i++)
  156. {
  157. s=generate(s->max(),s->max());
  158. }
  159. return s;
  160. }
  161.  
  162. void f(S *s)
  163. {
  164. a<<=a<<a;
  165. if(!s->next())
  166. {
  167. return;
  168. }
  169. S *m=generate2();
  170. while(m->next())
  171. {
  172. f(s->dup());
  173. }
  174. }
  175.  
  176. int main()
  177. {
  178. f(generate2());
  179. return a;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement