fork download
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define el cout << '\n'
  5. #define ii pair<int, int>
  6. #define fi first
  7. #define se second
  8.  
  9. using namespace std;
  10.  
  11. const int max_points = 2e2;
  12. const int maxk = 5;
  13. const int INF = 1e9;
  14.  
  15. int t;
  16. bool dp[max_points + 10][max_points + 10][4][4];
  17.  
  18. bool check(int a, int b)
  19. {
  20. if (a == 3 && b != 2)
  21. return 0;
  22. if (a != 2 && b == 3)
  23. return 0;
  24. return 1;
  25. }
  26.  
  27. int main()
  28. {
  29. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  30. if (fopen("SCORE.INP", "r"))
  31. {
  32. freopen("SCORE.INP", "r", stdin);
  33. freopen("SCORE.OUT", "w", stdout);
  34. }
  35. for (int i = 0; i <= max_points; i++)
  36. for (int j = 0; j <= max_points; j++)
  37. for (int a = 0; a <= 3; a++)
  38. for (int b = 0; b <= 3; b++)
  39. dp[i][j][a][b] = 0;
  40. dp[0][0][0][0] = 1;
  41. for (int i = 0; i <= max_points; i++)
  42. for (int j = 0; j <= max_points; j++)
  43. for (int a = 0; a <= 3; a++)
  44. for (int b = 0; b <= 3; b++)
  45. {
  46. int k = a + b;
  47. if (k > 5)
  48. continue;
  49. int need_point = k == 5 ? 15 : 25;
  50. if (a >= 1 && b != 3)
  51. {
  52. if (i >= need_point)
  53. for (int c = 0; c <= min(j, need_point - 2); c++)
  54. dp[i][j][a][b] |= dp[i - need_point][j - c][a - 1][b];
  55. for (int c = need_point + 1; i - c >= 0 && j - c + 2 >= 0; c++)
  56. dp[i][j][a][b] |= dp[i - c][j - c + 2][a - 1][b];
  57. }
  58. if (b >= 1 && a != 3)
  59. {
  60. if (j >= need_point)
  61. for (int c = 0; c <= min(i, need_point - 2); c++)
  62. dp[i][j][a][b] |= dp[i - c][j - need_point][a][b - 1];
  63. for (int c = need_point + 1; i - c + 2 >= 0 && j - c >= 0; c++)
  64. dp[i][j][a][b] |= dp[i - c + 2][j - c][a][b - 1];
  65. }
  66. }
  67. cin >> t;
  68. while (t--)
  69. {
  70. int a, b;
  71. cin >> a >> b;
  72. ii ans = {-1, 0};
  73. for (int i = 0; i <= 3; i++)
  74. for (int j = 0; j <= 3; j++)
  75. if ((i >= 3 || j >= 3) && dp[a][b][i][j])
  76. ans = max(ans, {i, -j});
  77. if (ans.fi == -1)
  78. cout << "Impossible", el;
  79. else
  80. cout << ans.fi << ":" << -ans.se, el;
  81. }
  82. }
  83.  
Success #stdin #stdout 0.06s 5308KB
stdin
Standard input is empty
stdout
Standard output is empty