Advertisement
Guest User

Untitled

a guest
Oct 4th, 2011
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <ctime>
  5. #include <cstring>
  6. #include <cstdlib>
  7. #include <string>
  8. #include <vector>
  9. #include <cfloat>
  10. using namespace std;
  11.  
  12. #define f first
  13. #define s second
  14. #define mp make_pair
  15. #define pb push_back
  16. #define INF (1<<30)
  17. #define ll long long
  18. #define PI 3.1415926535897932
  19. #define EPS 1e-9
  20. #define sqr(x) ((x)*(x))
  21. //#define NC
  22. //#define NM
  23. //const int X[]={-1,-2,1,2,-1,-2,1,2},Y[]={-2,-1,-2,-1,2,1,2,1};//????
  24. //const int X[]={-1,0,1,0},Y[]={0,1,0,-1};
  25. const int MOD = 1000000007;
  26.  
  27. class SRMSystemTestPhase {
  28. public:
  29.   int countWays(vector <string> a)
  30.   {
  31.     int dp[55][4][4][4] = {0}, n = a.size();
  32.     for (int i = 0, g1 = (a[0][0] == 'Y' ? 3 : 1); i < g1; i++)
  33.       for (int j = 0, g2 = (a[0][1] == 'Y' ? 3 : 1); j < g2; j++)
  34.         for (int k = 0, g3 = (a[0][2] == 'Y' ? 3 : 1); k < g3; k++)
  35.           dp[0][i][j][k] = 1;
  36.     for (int l = 0; l < n - 1; l++)
  37.       for (int i = 0, g1 = (a[l][0] == 'Y' ? 3 : 1); i < g1; i++)
  38.         for (int j = 0, g2 = (a[l][1] == 'Y' ? 3 : 1); j < g2; j++)
  39.           for (int k = 0, g3 = (a[l][2] == 'Y' ? 3 : 1); k < g3; k++)
  40.             for (int i1 = 0, g21 = (a[l + 1][0] == 'Y' ? 3 : 1); i1 < g21; i1++)
  41.               for (int j1 = 0, g22 = (a[l + 1][1] == 'Y' ? 3 : 1); j1 < g22; j1++)
  42.                 for (int k1 = 0, g23 = (a[l + 1][2] == 'Y' ? 3 : 1); k1 < g23; k1++)
  43.                 {
  44.                   int pas1 = (i == 2) + (j == 2) + (k == 2);
  45.                   int ch1 = (i == 1) + (j == 1) + (k == 1);
  46.                   int pas2 = (i1 == 2) + (j1 == 2) + (k1 == 2);
  47.                   int ch2 = (i1 == 1) + (j1 == 1) + (k1 == 1);
  48.                   if (pas1 > pas2 || pas1 == pas2 && ch1 <= ch2)
  49.                     dp[l + 1][i1][j1][k1] = (dp[l + 1][i1][j1][k1] + dp[l][i][j][k]) % MOD;
  50.                 }
  51.     int ans = 0;
  52.     for (int i = 0, g1 = (a[n - 1][0] == 'Y' ? 3 : 1); i < g1; i++)
  53.       for (int j = 0, g2 = (a[n - 1][1] == 'Y' ? 3 : 1); j < g2; j++)
  54.         for (int k = 0, g3 = (a[n - 1][2] == 'Y' ? 3 : 1); k < g3; k++)
  55.           ans = (ans + dp[n - 1][i][j][k]) % MOD;
  56.     return ans;
  57.   }
  58. };
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement