Advertisement
Guest User

Untitled

a guest
Jul 31st, 2013
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. using namespace std;
  5. const int N = 1000;
  6. int k, m;
  7. bool * d[5][N];
  8. int i, j, u, v, e, x, qa, ne, s, y, top, as[10];
  9. vector<int> g[N];
  10. int ma[10];
  11. void PR(int ar)
  12. {
  13. int i;
  14. for(i = 1; i <= 8; ++ i)
  15. {
  16. ma[i] = 0;
  17. }
  18. i = 0;
  19. while(ar)
  20. {
  21. ++ i;
  22. ma[i] = ar%10;
  23. ar = ar/10;
  24. }
  25. for(i = 8; i > 0; -- i)
  26. {
  27. printf("%d", ma[i]);
  28. }
  29. printf("\n");
  30. }
  31. int main()
  32. {
  33. // freopen("input.txt", "r", stdin);
  34. // freopen("output.txt", "w", stdout);
  35. scanf("%d%d", &k, &m);
  36. as[0] = 1;
  37. for(i = 1; i <= 6; ++ i)
  38. {
  39. as[i] = as[i-1]*10;
  40. }
  41. for(e = 1; e <= 3; ++ e)
  42. {
  43. d[e][0] = new bool [as[e]];
  44. d[e][0][0] = 1;
  45. for(i = 1; i < as[e]; ++ i)
  46. {
  47. d[e][i] = new bool [ as[e] ];
  48. if(i%10==0)
  49. {
  50. d[e][i][0] = 1;
  51. }
  52. x = i;s = 0;qa = 0;
  53. while(x)
  54. {
  55. s = s+as[qa]*(x%10);
  56. x = x/10;
  57. ++qa;
  58. ne = e-qa;
  59. if(ne > 0)
  60. {
  61. for(j = 0; j < as[e]; ++ j)
  62. {
  63. if(!d[e][i][j])
  64. {
  65. y = j-s;
  66. if(y >= 0 && y < as[ne] && d[ne][x][y])
  67. {
  68. d[e][i][j] = 1;
  69. continue;
  70. }
  71. y = j+s;
  72. if(y >= 0 && y < as[ne] && d[ne][x][y])
  73. {
  74. d[e][i][j] = 1;
  75. continue;
  76. }
  77. if(s!=0 && j%s==0)
  78. {
  79. y = j/s;
  80. if(y < as[ne] && d[ne][x][y])
  81. {
  82. d[e][i][j] = 1;
  83. }
  84. }
  85. }
  86. }
  87. }
  88. else
  89. {
  90. d[e][s][s] = 1;
  91. }
  92. }
  93. }
  94. }
  95. for(i = 0; i < N; ++ i)
  96. {
  97. for(j = 0; j < N; ++ j)
  98. {
  99. if(d[3][i][j])
  100. {
  101. g[j].push_back(i);
  102. }
  103. d[3][i][j] = 0;
  104. }
  105. }
  106. for(i = 0; i < N; ++ i)
  107. {
  108. j = k-i;
  109. if(j >= 0 && j < N)
  110. {
  111. for(u = 0; u < g[i].size(); ++ u)
  112. {
  113. for(v = 0; v < g[j].size(); ++ v)
  114. {
  115. if(d[3][ g[i][u] ][ g[j][v] ]==0)
  116. {
  117. ++ top;
  118. PR(g[i][u]*as[4]+g[j][v]);
  119. if(top==m)
  120. goto x;
  121. d[3][ g[i][u] ][ g[j][v] ] = 1;
  122. }
  123. }
  124. }
  125. }
  126. j = i-k;
  127. if(j >= 0 && j < N)
  128. {
  129. for(u = 0; u < g[i].size(); ++ u)
  130. {
  131. for(v = 0; v < g[j].size(); ++ v)
  132. {
  133. if(d[3][ g[i][u] ][ g[j][v] ]==0)
  134. {
  135. ++ top;
  136. PR(g[i][u]*as[4]+g[j][v]);
  137. if(top==m)
  138. goto x;
  139. d[3][ g[i][u] ][ g[j][v] ] = 1;
  140. }
  141. }
  142. }
  143. }
  144. j = i+k;
  145. if(j >= 0 && j < N)
  146. {
  147. for(u = 0; u < g[i].size(); ++ u)
  148. {
  149. for(v = 0; v < g[j].size(); ++ v)
  150. {
  151. if(d[3][ g[i][u] ][ g[j][v] ]==0)
  152. {
  153. ++ top;
  154. PR(g[i][u]*as[4]+g[j][v]);
  155. if(top==m)
  156. goto x;
  157. d[3][ g[i][u] ][ g[j][v] ] = 1;
  158. }
  159. }
  160. }
  161. }
  162.  
  163. if(i!=0 && k%i==0)
  164. {
  165. j = k/i;
  166. if(j >= 0 && j < N)
  167. {
  168. for(u = 0; u < g[i].size(); ++ u)
  169. {
  170. for(v = 0; v < g[j].size(); ++ v)
  171. {
  172. if(d[3][ g[i][u] ][ g[j][v] ]==0)
  173. {
  174. ++ top;
  175. PR(g[i][u]*as[4]+g[j][v]);
  176. if(top==m)
  177. goto x;
  178. d[3][ g[i][u] ][ g[j][v] ] = 1;
  179. }
  180. }
  181. }
  182. }
  183. }
  184. }
  185. x:
  186. return 0;
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement