fork(2) download
  1. #include <algorithm>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <cstdlib>
  6. #include <climits>
  7. #include <iostream>
  8. #include <string>
  9. #include <sstream>
  10. #include <vector>
  11. #include <stack>
  12. #include <queue>
  13. #include <deque>
  14. #include <set>
  15. #include <map>
  16.  
  17. using namespace std;
  18.  
  19. int M, N;
  20. string s;
  21. #define FOR(i, N) for(int i = 0; i < N; i++)
  22. #define FOR1e(i, N) for(int i = 1; i <= N; i++)
  23. #define REP(i, M, N) for(int i = M; i < N; i++)
  24. #define REPe(i, M, N) for(int i = M; i <= N; i++)
  25. #define sc(N) scanf("%d", &N)
  26. #define scsc(M, N) scanf("%d %d", &M, &N)
  27. #define gt(s) getline(cin, s)
  28. #define ll long long
  29. #define vi vector <int>
  30. #define mp make_pair
  31. #define pb push_back
  32. #define mx 505
  33.  
  34. int arr[10], dp[10][505];
  35. //505 because maximum positive = 50*5 = 250, minimum negative -250, so 250*2 values = 500 values
  36.  
  37. int fun(int i, int val){
  38. int &ret = dp[i][val];
  39. if(i == 5)
  40. return ret = val == 23;
  41. if(ret != -1)
  42. return ret;
  43. return ret = (fun(i+1, val+arr[i]) || fun(i+1, val-arr[i]) || fun(i+1, val*arr[i]));
  44. }
  45.  
  46. int main(){
  47. // freopen("in.txt", "r", stdin);
  48. while(sc(arr[0]) != EOF){
  49. REP(i, 1, 5) sc(arr[i]);
  50. if(!arr[0] && !arr[1] && !arr[2] && !arr[3] && !arr[4]) break;
  51. sort(arr, arr+5);
  52. bool b = 0;
  53. do{
  54. memset(dp, -1, sizeof dp);
  55. if(fun(1, arr[0])) b = 1;
  56. }while(next_permutation(arr, arr+5) && !b);
  57. puts((b) ? "Possible":"Impossible");
  58. }
  59. return 0;
  60. }
Success #stdin #stdout 0s 3364KB
stdin
1 1 1 1 1

1 2 3 4 5

2 3 5 7 11

0 0 0 0 0
stdout
Impossible
Possible
Possible