Advertisement
Guest User

Untitled

a guest
Nov 25th, 2014
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cassert>
  4. #include <cmath>
  5. #include <ctime>
  6. #include <cstdio>
  7. #include <queue>
  8. #include <set>
  9. #include <map>
  10. #include <fstream>
  11. #include <cstdlib>
  12. #include <string>
  13. #include <cstring>
  14. #include <algorithm>
  15. #include <numeric>
  16.  
  17. #define mp make_pair
  18. #define pb push_back
  19. #define fi first
  20. #define se second
  21. #define all(x) (x).begin(), (x).end()
  22. #define rall(x) (x).rbegin(), (x).rend()
  23. #define forn(i, n) for (int i = 0; i < (int)(n); ++i)
  24. #define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
  25. #define ford(i, n) for (int i = (int)((n) - 1); i >= 0; --i)
  26. #define fornn(i, a, b) for (int i = (int)(a); i < (int)(b); ++i)
  27. #define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)
  28. #define debugv(a) forn(i, a.size()) cerr << a[i] << ' '; cerr << '\n'
  29.  
  30. template<class T>
  31. bool uin(T &a, T b) {
  32. if (a > b) {
  33. a = b;
  34. return true;
  35. }
  36. return false;
  37. }
  38.  
  39. template<class T>
  40. bool uax(T &a, T b) {
  41. if (a < b) {
  42. a = b;
  43. return true;
  44. }
  45. return false;
  46. }
  47.  
  48. using namespace std;
  49.  
  50. typedef pair<int, int> pii;
  51. typedef vector<int> vi;
  52. typedef vector<vi> vvi;
  53.  
  54. typedef long long i64;
  55. typedef unsigned long long u64;
  56. typedef pair<i64, i64> pi64;
  57. typedef vector<i64> vi64;
  58. typedef vector<vi64> vvi64;
  59.  
  60. typedef long double ld;
  61. typedef vector<ld> vld;
  62. typedef vector<vld> vvld;
  63.  
  64. const int MAXN = 1000000 + 1;
  65. const i64 P = 1000000000 + 9;
  66. string s[3];
  67. i64 ways[MAXN][2][2];
  68. int precalc[28][28][28][3][3];
  69.  
  70. int gets(const string &s, int i) {
  71. if (i >= (int)s.size()) return 0;
  72. if (s[i] == '?') return 27;
  73. return 1 + s[i] - 'a';
  74. }
  75.  
  76. int comp(int a, int b) {
  77. if (a == b) return 0;
  78. if (a < b) return 1;
  79. return 2;
  80. }
  81.  
  82. int combine(int a, int b) {
  83. if (a == 0) return b;
  84. return a;
  85. }
  86.  
  87. void adds(i64 &x, i64 y) {
  88. x += y; x %= P;
  89. }
  90.  
  91. int main() {
  92. ios::sync_with_stdio(false);
  93. #ifdef LOCAL_DEFINE
  94. freopen("input.txt", "rt", stdin);
  95. // freopen("output.txt", "wt", stdout);
  96. #endif
  97.  
  98. forn(a, 28) forn(b, 28) forn(c, 28) {
  99. for (int ca = (a == 27 ? 1 : a); ca < (a == 27 ? 27 : a + 1); ++ca) {
  100. for (int cb = (b == 27 ? 1 : b); cb < (b == 27 ? 27 : b + 1); ++cb) {
  101. for (int cc = (c == 27 ? 1 : c); cc < (c == 27 ? 27 : c + 1); ++cc) {
  102. int f1 = comp(ca, cb), f2 = comp(cb, cc);
  103. ++precalc[a][b][c][f1][f2];
  104. }
  105. }
  106. }
  107. }
  108.  
  109. int N;
  110. cin >> N;
  111. forn(i, N) {
  112. forn(j, 3) cin >> s[j];
  113. int K = 0;
  114. forn(j, 3) K = max(K, (int)s[j].size());
  115. forn(i, K + 1) forn(j, 2) forn(k, 2) ways[i][j][k] = 0;
  116. ways[0][0][0] = 1;
  117. forn(i, K) forn(f1, 2) forn(f2, 2) {
  118. int a = gets(s[0], i), b = gets(s[1], i), c = gets(s[2], i);
  119. forn(j, 3) forn(k, 3) {
  120. int ff1 = combine(f1, j), ff2 = combine(f2, k);
  121. if (ff1 < 2 && ff2 < 2) adds(ways[i + 1][ff1][ff2], ways[i][f1][f2] * precalc[a][b][c][j][k]);
  122. }
  123. }
  124. cout << ways[K][1][1] << '\n';
  125. }
  126.  
  127. #ifdef LOCAL_DEFINE
  128. cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  129. #endif
  130. return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement