Advertisement
STANAANDREY

google code jam("moons&umbrellas")

Mar 31st, 2021
651
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define DISPLAY_CASE cout << "Case #" << __caseNr__ << ": ";
  4. ///********************
  5. const int NMAX = 1003;
  6. char s[NMAX];
  7. int dp[NMAX][2], n;//0-c, 1-j
  8.  
  9. void doQ(int __caseNr__) {
  10.     int x, y, ans;
  11.     cin >> x >> y >> (s + 1);
  12.     dp[1][0] = dp[1][1] = 0;
  13.     n = strlen(s + 1);
  14.     for (int i = 2; i <= n; i++) {
  15.         if (s[i - 1] == '?') {
  16.             if (s[i] == '?') {
  17.                 dp[i][1] = min(dp[i - 1][0] + x, dp[i - 1][1]);
  18.                 dp[i][0] = min(dp[i - 1][1] + y, dp[i - 1][0]);
  19.             } else if (s[i] == 'C') {
  20.                 dp[i][0] = min({dp[i - 1][0], dp[i - 1][1] + y});
  21.                 dp[i][1] = 1e9;
  22.             } else if (s[i] == 'J') {
  23.                 dp[i][0] = 1e9;
  24.                 dp[i][1] = min({dp[i - 1][1], dp[i - 1][0] + x});
  25.             }
  26.         } else if (s[i - 1] == 'C') {
  27.             if (s[i] == '?') {
  28.                 dp[i][0] = dp[i - 1][0];
  29.                 dp[i][1] = dp[i - 1][0] + x;
  30.             } else if (s[i] == 'C') {
  31.                 dp[i][0] = dp[i - 1][0];
  32.                 dp[i][1] = 1e9;
  33.             } else if (s[i] == 'J') {
  34.                 dp[i][0] = 1e9;
  35.                 dp[i][1] = dp[i - 1][0] + x;
  36.             }
  37.         } else if (s[i - 1] == 'J') {
  38.             if (s[i] == '?') {
  39.                 dp[i][0] = dp[i - 1][1] + y;
  40.                 dp[i][1] = dp[i - 1][1];
  41.             } else if (s[i] == 'C') {
  42.                 dp[i][0] = dp[i - 1][1] + y;
  43.                 dp[i][1] = 1e9;
  44.             } else if (s[i] == 'J') {
  45.                 dp[i][0] = 1e9;
  46.                 dp[i][1] = dp[i - 1][1];
  47.             }
  48.         }
  49.     }/*
  50.     for (int i = 1; i <= n; i++) {
  51.         cout << dp[i][0] << ' '<< dp[i][1] << endl;
  52.     }//*/
  53.     DISPLAY_CASE
  54.     cout << min(dp[n][0], dp[n][1]) << "\n";
  55. }
  56.  
  57. int main() {
  58.     int q(1);
  59.     cin >> q;
  60.     for (int i = 1; i <= q; i++) {
  61.         doQ(i);
  62.     }
  63.     return 0;
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement