fork download
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #define ll long long
  5. using namespace std;
  6.  
  7. ll g[14][5000][14];
  8. ll save[12313];
  9. ll t = 0;
  10. ll n;
  11. ll s = 0;
  12. ll cs[14];
  13. ll ara[123213];
  14. ll tam[123321];
  15. ll ee;
  16. ll bodau[14][50000][14];
  17. ll ket = 0;
  18. ll supe;
  19. string na;
  20. ll de = 1;
  21. void dfs(ll gt)
  22. {
  23. if (gt < 0) return;
  24. if (gt == 0)
  25. {
  26.  
  27. for (int i = 0; i < t; ++i)
  28. {
  29. g[n][s][i] = save[i];
  30. //g[n][s].push_back(save[i]);
  31. }
  32. // mình sẽ thực thi trong này !
  33. //
  34. /*
  35. cout << "tong \n";
  36. for (int i = 0; i < t; ++i)
  37. {
  38. cout << save[i];
  39. if (i < t - 1) cout << "+";
  40. }
  41. cout << "="<<n<<"\n";
  42. */
  43.  
  44. s++;
  45. return;
  46. }
  47. for (int i = 1; i <= n; ++i)
  48. {
  49. save[t++] = i;
  50. //cout << gt << " chiu ko noi \n";
  51. dfs(gt - i);
  52. --t;
  53. }
  54. }
  55.  
  56. // khỡi tạo 1 bộ dấu mà chúng hiển thị mà ko cần phải tính lại chúng trong đây !
  57. // chương trình này nó sẽ chỉ thực thi đúng 1 lần duy nhất !
  58. // cũng có thể ko cần phải viết để lưu vì cái này ko có herisstric cho nên ko cần lưu trước thì
  59. // xem nó hoạt động có ổn hay ko trong đây ! :))
  60. void dfs2(ll tt,ll can )
  61. {
  62. if (tt >= can)
  63. {
  64. if (supe % 2 == 0 || supe % 3 == 0 || supe % 5 == 0 || supe % 7 == 0)
  65. ket++;
  66. return;
  67. }
  68. for (int i = 0; i < 2; ++i)
  69. {
  70. if (i & 1)
  71. {
  72. supe+= tam[tt];
  73. dfs2(tt + 1, can);
  74. supe -= tam[tt];
  75. }
  76. else
  77. {
  78. supe-= tam[tt];
  79. dfs2(tt + 1, can);
  80. supe += tam[tt];
  81. }
  82. }
  83.  
  84. }
  85.  
  86. int main()
  87. {
  88. //while (cin >> n)
  89. for(int i=1;i<14;++i)
  90. {
  91. s = 0;
  92. n = i;
  93. dfs(n);
  94. cs[i] = s;
  95. //cout << s << "lklkl\n";
  96. }
  97.  
  98. int test;
  99. cin >> test;
  100. while (test--)
  101. {
  102. cin >> na;
  103. ll ef=0;
  104. // mình tính thành chiều dài của con số ! trong đây !
  105. n = 0;
  106. for (ll i = 0; i < na.length(); ++i)
  107. {
  108. ara[i] = int(na[i] - '0');
  109. }
  110. ef = n = na.length();
  111. /*
  112. while (na)
  113. {
  114. ara[ef++] = na % 10;
  115. na /= 10;
  116. }
  117. */
  118. // đảo thứ tự về vị trí ban đầu !
  119. //for (ll i = 0; i < ef - 1 - i; ++i) swap(ara[i], ara[ef - i - 1]);
  120. //for (int i = 0; i < ef; ++i) cout << ara[i] << ","; cout << "\n";
  121. n = ef;
  122. // reset ket về 0
  123. ket = 0;// đây chính là kết quả ! cho từng trường hợp thử nghiệm !
  124. ll tf = 0;
  125. for (ll i = 0; i < cs[n]; ++i)
  126. {
  127. ee = 0;
  128. tf = 0;
  129. for (ll j = 0; g[n][i][j] != 0; ++j)
  130. {
  131. //cout << g[n][i][j];// chiều dài của con số
  132. ll sh = 0;
  133. ll dem = g[n][i][j];
  134. //for(int jk=tf;jk<g[n][i][j];++jk)
  135. while(dem)
  136. {
  137. // chỗ này hơi khó hiểu !trong đây !
  138. sh = sh * 10 + ara[tf++];
  139. dem--;
  140. }
  141. tam[ee++] = sh;
  142. //tf += g[n][i][j];
  143.  
  144. // if (g[n][i][j + 1] != 0) cout << "+";
  145. }
  146. //cout << " sau khi ket thuc cai sum beu dien \n";
  147. // sau khi có trong biến tạm !
  148. // mình in ra thử xem nó có đúng hay ko ?
  149. // reset mảng về ko !
  150. ll supe = 0;
  151. dfs2(0, ee);// chú ý là nó chỉ chãy đến ee
  152. //cout << " chieu dai " << ee << " dsds\n";
  153. //for (int j = 0; j < ee; ++j)
  154. //cout << tam[j] << " ";
  155. //cout << "\n";
  156.  
  157. //cout << "\n";
  158. }
  159. // https://w...content-available-to-author-only...j.com/PTIT/problems/P179PROC/
  160. cout<<"Case #"<<de++<<": "<< ket/2 <<"\n";
  161.  
  162. // ko biết nó có đúng hoàn toàn hay chưa nhưng mình
  163. // hi vọng nó có ý nghĩa cho 1 số bạn muốn biết về nó
  164. // một lần nữa mình ko hề giấu giếm bất cứ luận điểm nào
  165. // quan trọng là có bao nhiêu người hiểu code này !
  166. // mình dùng quay lui và sinh nhị phân
  167. // chương trình dư thừa khi nó có trùng lặp 1 số lượng gấp đôi
  168. // và mình cũng ko biết tại sao lại vậy !
  169. // code này mình chưa test , mình hi vọng có ai đó test code dùm mình
  170. // và nếu bạn muốn thì nó là của bạn ,!
  171. // mình viết code nhìu năm trời nhưng toàn những bài trên spoj
  172. // ai muốn nhìn bài nào thì thoải mái
  173. // chỉ cần đê cho mình yên ổn , đừng để ý đến mình ngoài xh mình cám ơn !
  174. //
  175. }
  176. system("pause");
  177. return 0;
  178. }
Success #stdin #stdout #stderr 0.01s 14144KB
stdin
4
1
9
12345
011
stdout
Case #1: 0
Case #2: 1
Case #3: 64
Case #4: 6
stderr
sh: 1: pause: not found