fork(4) download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long int ll;
  6.  
  7. vector<ll> finals, curr;
  8.  
  9. ll n, val[36], tar;
  10.  
  11. void foo(int pos){
  12. if(pos == n-1){
  13. /*for(int j = 0; j < curr.size(); j++)
  14.   cout << curr[j] << " ";
  15.   cout << endl;*/
  16. int counts = 0;
  17. for(int j = 0; j < (2*n - 1); j++){
  18. if(j % 2 != 0 && curr[j] == -3){
  19. val[counts - 1] *= curr[j+1];
  20. j++;
  21. continue;
  22. }
  23. if(j % 2 != 0 && curr[j] == -4){
  24. if(curr[j+1] == 0) return;
  25. if(val[counts - 1] % curr[j+1] != 0) return;
  26. val[counts - 1] /= curr[j+1];
  27. j++;
  28. continue;
  29. }
  30. val[counts++] = curr[j];
  31. }
  32.  
  33. ll ans = val[0];
  34. for(int j = 1; j < counts; j += 2)
  35. if(val[j] == -1) ans += val[j+1];
  36. else ans -= val[j+1];
  37.  
  38. //cout << ans << endl;
  39.  
  40. if(ans == tar){
  41. for(int j = 0; j < 2*n -1; j++)
  42. finals[j] = curr[j];
  43. return;
  44. }
  45. return;
  46. }
  47.  
  48. curr[pos*2 + 1] = -1;
  49. foo(pos+1);
  50.  
  51. curr[pos*2+1] = -2;
  52. foo(pos+1);
  53.  
  54. curr[pos*2+1] = -3;
  55. foo(pos+1);
  56.  
  57. curr[pos*2+1] = -4;
  58. foo(pos+1);
  59. }
  60.  
  61. int main(){
  62. cin >> n;
  63. while(n != -1){
  64. curr.clear();
  65. finals.clear();
  66. cin >> tar;
  67. for(int j = 0; j < n; j++){
  68. ll t;
  69. cin >> t;
  70. curr.push_back(t);
  71. curr.push_back(-1);
  72. finals.push_back(t);
  73. finals.push_back(-1);
  74. }
  75. foo(0);
  76. cout << tar << " = ";
  77. for(int j = 0; j < (2*n)-1; j++)
  78. if(j%2 != 0 && finals[j] == -1) cout << "+ ";
  79. else if(j%2 != 0 && finals[j] == -2) cout << "- ";
  80. else if(j%2 != 0 && finals[j] == -3) cout << "* ";
  81. else if(j%2 != 0 && finals[j] == -4) cout << "/ ";
  82. else cout << finals[j] << " ";
  83. cout << endl;
  84. finals.clear();
  85. cin >> n;
  86. }
  87. return 0;
  88. }
  89.  
Success #stdin #stdout 0s 16056KB
stdin
4 16 2 2 2 2
3 9 2 3 3
3 21 1 4 5
-1
stdout
16 = 2 * 2 * 2 * 2 
9 = 2 * 3 + 3 
21 = 1 + 4 * 5