fork download
  1. #include <iostream>
  2. #include <queue>
  3. #include <map>
  4. #include <vector>
  5. #include <algorithm>
  6. int main () {
  7. std::queue<std::vector<int>> que;
  8. std::map<std::vector<int>, int> dist;
  9. std::map<std::vector<int>, std::vector<int>> par;
  10. size_t sz;
  11. std::cin >> sz;
  12. std::vector<int> st(sz);
  13. int n = 0;
  14. for(size_t i = 0;i<sz;i++) {
  15. std::cin >> st[i];
  16. n=std::max(n, st[i]);
  17. }
  18. que.push(st);
  19. dist[st]=0;
  20. reverse(st.begin(), st.end());
  21. int ls=0;
  22. while(que.size()) {
  23. auto at = que.front();
  24. que.pop();
  25. {
  26. auto rev = at;
  27. std::reverse(rev.begin(), rev.end());
  28. if(dist.find(rev)!=dist.end()) {
  29. std::cout << dist[rev]+dist[at] << std::endl;
  30. std::vector<std::vector<int>> res;
  31. while(at.size()) {
  32. res.push_back(at);
  33. at=par[at];
  34. }
  35. std::reverse(res.begin(), res.end());
  36. rev=par[rev];
  37. while(rev.size()) {
  38. std::reverse(rev.begin(), rev.end());
  39. res.push_back(rev);
  40. std::reverse(rev.begin(), rev.end());
  41. rev=par[rev];
  42. }
  43. for(auto i:res) {
  44. for(int j:i)std::cout << j << " ";
  45. std::cout << "\n";
  46. }
  47. return 0;
  48. }
  49. }
  50. bool used[n+1];
  51. for(int i = 0;i<=n;i++)used[i]=0;
  52. for(size_t j = 0;j<at.size();j++)used[at[j]]=1;
  53. for(size_t j = 0;j<at.size();j++) {
  54. if(at[j]) {
  55. for(int k = 1;k<at[j];k++) {
  56. if(used[k] or used[at[j]-k] or at[j]-k==k)continue;
  57. std::vector<int> tmp;
  58. for(size_t m = 0;m<j;m++)tmp.push_back(at[m]);
  59. tmp.push_back(k);
  60. tmp.push_back(at[j]-k);
  61. for(size_t m = j+1;m<at.size();m++)tmp.push_back(at[m]);
  62. if(dist.find(tmp)!=dist.end())continue;
  63. dist[tmp]=dist[at]+1;
  64. par[tmp]=at;
  65. que.push(tmp);
  66. }
  67. }
  68. }
  69. for(size_t j = 0;j+1<at.size();j++) {
  70. if(at[j]+at[j+1]<=n and used[at[j]+at[j+1]]==0) {
  71. std::vector<int> tmp;
  72. for(size_t m = 0;m<j;m++)tmp.push_back(at[m]);
  73. tmp.push_back(at[j]+at[j+1]);
  74. for(size_t m = j+2;m<at.size();m++)tmp.push_back(at[m]);
  75. if(dist.find(tmp)!=dist.end())continue;
  76. dist[tmp]=dist[at]+1;
  77. par[tmp]=at;
  78. que.push(tmp);
  79. }
  80. }
  81. }
  82. return 0;
  83. }
  84.  
Success #stdin #stdout 1.1s 97604KB
stdin
12 
6 11 8 2 7 10 9 12 4 1 14 3
stdout
172
6 11 8 2 7 10 9 12 4 1 14 3 
6 11 8 2 7 10 9 12 5 14 3 
6 11 8 2 7 10 9 12 1 4 14 3 
6 11 8 2 7 10 9 13 4 14 3 
5 1 11 8 2 7 10 9 13 4 14 3 
5 12 8 2 7 10 9 13 4 14 3 
5 12 8 2 6 1 10 9 13 4 14 3 
5 12 8 2 6 11 9 13 4 14 3 
5 12 10 6 11 9 13 4 14 3 
5 12 2 8 6 11 9 13 4 14 3 
5 12 2 8 6 1 10 9 13 4 14 3 
5 12 2 8 7 10 9 13 4 14 3 
5 1 11 2 8 7 10 9 13 4 14 3 
6 11 2 8 7 10 9 13 4 14 3 
6 11 2 8 7 10 9 12 1 4 14 3 
6 13 8 7 10 9 12 1 4 14 3 
6 13 8 7 10 9 12 5 14 3 
6 13 8 7 10 9 12 5 14 1 2 
6 13 8 3 4 10 9 12 5 14 1 2 
6 13 11 4 10 9 12 5 14 1 2 
6 13 11 4 10 9 12 5 14 3 
6 13 11 4 2 8 9 12 5 14 3 
6 13 11 4 2 7 1 9 12 5 14 3 
6 13 11 4 2 7 10 12 5 14 3 
6 13 11 4 9 10 12 5 14 3 
6 13 11 4 9 10 12 5 14 1 2 
6 13 8 3 4 9 10 12 5 14 1 2 
6 13 8 7 9 10 12 5 14 1 2 
6 13 8 7 9 10 12 5 14 3 
6 2 11 8 7 9 10 12 5 14 3 
6 2 11 8 7 9 10 12 1 4 14 3 
6 2 11 8 7 9 10 13 4 14 3 
6 2 11 8 7 9 10 1 12 4 14 3 
6 13 8 7 9 10 1 12 4 14 3 
6 13 8 2 5 9 10 1 12 4 14 3 
6 13 8 2 5 9 11 12 4 14 3 
6 13 10 5 9 11 12 4 14 3 
6 13 10 5 9 11 12 4 14 1 2 
6 13 7 3 5 9 11 12 4 14 1 2 
6 13 7 8 9 11 12 4 14 1 2 
6 13 7 8 9 11 12 4 14 3 
5 1 13 7 8 9 11 12 4 14 3 
5 1 13 7 8 9 11 10 2 4 14 3 
5 1 13 7 8 9 11 10 6 14 3 
5 1 13 7 8 9 11 10 6 2 12 3 
5 14 7 8 9 11 10 6 2 12 3 
5 13 1 7 8 9 11 10 6 2 12 3 
5 13 1 7 8 9 11 10 6 14 3 
5 13 1 7 8 9 11 10 2 4 14 3 
5 13 1 7 8 9 11 12 4 14 3 
5 13 1 7 2 6 9 11 12 4 14 3 
5 13 8 2 6 9 11 12 4 14 3 
5 13 10 6 9 11 12 4 14 3 
5 13 10 6 1 8 11 12 4 14 3 
5 13 10 7 8 11 12 4 14 3 
5 13 10 7 2 6 11 12 4 14 3 
5 13 10 9 6 11 12 4 14 3 
5 13 10 1 8 6 11 12 4 14 3 
5 13 10 1 8 6 2 9 12 4 14 3 
5 13 11 8 6 2 9 12 4 14 3 
5 13 11 1 7 6 2 9 12 4 14 3 
5 13 11 1 7 8 9 12 4 14 3 
5 13 11 1 7 8 9 2 10 4 14 3 
5 13 12 7 8 9 2 10 4 14 3 
5 13 12 7 8 11 10 4 14 3 
5 13 12 7 2 6 11 10 4 14 3 
5 13 12 9 6 11 10 4 14 3 
5 13 12 9 6 11 2 8 4 14 3 
5 13 12 9 6 1 10 2 8 4 14 3 
5 13 12 9 7 10 2 8 4 14 3 
5 13 1 11 9 7 10 2 8 4 14 3 
5 13 1 11 9 7 12 8 4 14 3 
5 13 1 11 9 7 2 10 8 4 14 3 
5 13 1 11 9 7 2 10 12 14 3 
5 13 1 11 9 7 2 10 12 6 8 3 
5 14 11 9 7 2 10 12 6 8 3 
5 1 13 11 9 7 2 10 12 6 8 3 
5 1 13 11 9 7 2 10 12 14 3 
6 13 11 9 7 2 10 12 14 3 
6 13 11 1 8 7 2 10 12 14 3 
6 13 11 1 8 9 10 12 14 3 
6 13 11 1 8 9 10 5 7 14 3 
6 13 12 8 9 10 5 7 14 3 
6 11 2 12 8 9 10 5 7 14 3 
6 11 2 12 8 9 10 5 7 13 1 3 
6 11 14 8 9 10 5 7 13 1 3 
6 11 14 8 9 10 12 13 1 3 
6 11 14 8 2 7 10 12 13 1 3 
6 11 14 8 2 7 10 12 13 4 
6 11 14 8 2 7 10 3 9 13 4 
6 11 14 8 2 7 10 3 9 12 1 4 
6 11 14 8 2 7 13 9 12 1 4 
6 11 14 10 7 13 9 12 1 4 
6 11 14 10 7 13 9 12 5 
6 11 14 10 7 13 8 1 12 5 
6 11 14 10 7 9 4 8 1 12 5 
6 11 14 10 7 9 4 8 13 5 
6 11 14 10 7 9 12 13 5 
2 4 11 14 10 7 9 12 13 5 
2 1 3 11 14 10 7 9 12 13 5 
2 1 3 11 6 8 10 7 9 12 13 5 
2 1 14 6 8 10 7 9 12 13 5 
3 14 6 8 10 7 9 12 13 5 
3 14 4 2 8 10 7 9 12 13 5 
3 14 4 2 8 10 1 6 9 12 13 5 
3 14 4 2 8 11 6 9 12 13 5 
3 14 4 10 11 6 9 12 13 5 
3 14 4 10 11 6 2 7 12 13 5 
3 14 4 10 11 8 7 12 13 5 
3 14 4 10 2 9 8 7 12 13 5 
3 14 4 10 2 9 8 7 1 11 13 5 
3 14 4 12 9 8 7 1 11 13 5 
3 14 4 12 9 2 6 7 1 11 13 5 
3 14 4 12 9 2 6 8 11 13 5 
3 14 4 12 9 2 6 8 1 10 13 5 
3 14 4 12 11 6 8 1 10 13 5 
3 14 4 12 11 6 9 10 13 5 
3 14 4 12 11 6 2 7 10 13 5 
3 14 4 12 11 8 7 10 13 5 
3 14 4 12 11 8 1 6 10 13 5 
3 14 4 12 11 9 6 10 13 5 
3 14 4 12 11 9 6 2 8 13 5 
3 14 4 12 11 9 6 2 7 1 13 5 
3 14 4 12 11 9 8 7 1 13 5 
3 14 4 2 10 11 9 8 7 1 13 5 
3 14 6 10 11 9 8 7 1 13 5 
3 12 2 6 10 11 9 8 7 1 13 5 
3 12 2 6 10 11 9 8 7 14 5 
3 12 2 6 10 11 9 8 7 13 1 5 
3 14 6 10 11 9 8 7 13 1 5 
3 14 4 2 10 11 9 8 7 13 1 5 
3 14 4 12 11 9 8 7 13 1 5 
3 14 4 12 11 9 8 7 13 6 
2 1 14 4 12 11 9 8 7 13 6 
2 1 14 4 12 11 9 5 3 7 13 6 
2 1 14 4 12 11 9 5 10 13 6 
3 14 4 12 11 9 5 10 13 6 
3 14 4 12 11 9 5 2 8 13 6 
3 14 4 12 1 10 9 5 2 8 13 6 
3 14 4 12 1 10 9 7 8 13 6 
3 14 4 12 1 10 9 7 8 11 2 6 
3 14 4 13 10 9 7 8 11 2 6 
3 14 4 1 12 10 9 7 8 11 2 6 
3 14 5 12 10 9 7 8 11 2 6 
3 14 5 12 10 9 7 8 13 6 
2 1 14 5 12 10 9 7 8 13 6 
2 1 14 5 12 10 9 4 3 8 13 6 
2 1 14 5 12 10 9 4 11 13 6 
3 14 5 12 10 9 4 11 13 6 
3 14 5 12 10 7 2 4 11 13 6 
3 14 5 12 9 1 7 2 4 11 13 6 
3 14 5 12 9 8 2 4 11 13 6 
3 14 5 12 9 10 4 11 13 6 
2 1 14 5 12 9 10 4 11 13 6 
2 1 14 5 12 9 10 4 3 8 13 6 
2 1 14 5 12 9 10 7 8 13 6 
3 14 5 12 9 10 7 8 13 6 
3 14 4 1 12 9 10 7 8 13 6 
3 14 4 1 12 9 10 7 8 2 11 6 
3 14 4 13 9 10 7 8 2 11 6 
3 14 4 13 9 10 7 8 2 11 1 5 
3 14 4 13 9 10 7 8 2 12 5 
3 14 4 13 9 10 1 6 8 2 12 5 
3 14 4 13 9 11 6 8 2 12 5 
3 14 4 13 9 11 6 10 12 5 
3 14 4 13 9 11 6 2 8 12 5 
3 14 4 13 9 10 1 6 2 8 12 5 
3 14 4 13 9 10 7 2 8 12 5 
3 14 4 13 9 10 7 2 8 11 1 5 
3 14 4 13 9 10 7 2 8 11 6 
3 14 4 1 12 9 10 7 2 8 11 6 
3 14 5 12 9 10 7 2 8 11 6 
3 14 1 4 12 9 10 7 2 8 11 6