Advertisement
Guest User

Untitled

a guest
Oct 4th, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <locale>
  5. #include <set>
  6. #include <cstdio>
  7. #include <map>
  8. #include <algorithm>
  9. #include <ctype.h>
  10. #include <cmath>
  11. #include <cstdlib>
  12. #include <utility>
  13. #include <queue>
  14. #include <iomanip>
  15. #include <stack>
  16. #define _USE_MATH_DEFINES
  17.  
  18. using namespace std;
  19.  
  20. vector<int> used;;
  21.  
  22. void dfs(vector<vector<int> > &g, int s, int p, bool &flag)
  23. {
  24.     int i;
  25.  
  26.     used[s] = 1;
  27.     if (flag) return;
  28.  
  29.     for (i = 0; i < g[s].size(); i++)
  30.     if (!used[g[s][i]]) {
  31.         if (g[s][i] == p) {
  32.             flag = 1;
  33.             return;
  34.         }
  35.         dfs(g, g[s][i], p, flag);
  36.     }
  37.  
  38. }
  39.  
  40.  
  41. int main()
  42. {
  43.     freopen("input.txt","r",stdin);
  44.     freopen("output.txt", "w", stdout);
  45.  
  46.     int n;
  47.     cin >> n;
  48.     map<string, int> teams;
  49.  
  50.     for (long long i = 0; i < (2 << (n - 1)); i++) {
  51.         string name;
  52.         cin >> name;
  53.         teams[name] = i + 1;
  54.     }
  55.     string res;
  56.     cin >> res;
  57.     vector<vector<int> > g((2 << (n - 1)) + 1);
  58.     vector<int> list((2 << (n - 1)));
  59.     for (int i = 0; i < 2 << (n - 1); i++) {
  60.         list[i] = i+1;
  61.     }
  62.     int cnt = 0;
  63.     vector<int> tmp;
  64.     for (int i = 1; i <= n; i++) {
  65.         for (int j = 1; j < list.size(); j += 2, cnt++) {
  66.             if (res[cnt] == 'W') {
  67.                 g[list[j - 1]].push_back(list[j]);
  68.                 tmp.push_back(list[j - 1]);
  69.             }
  70.             else {
  71.                 g[list[j]].push_back(list[j - 1]);
  72.                 tmp.push_back(list[j]);
  73.             }
  74.         }
  75.         list.assign(tmp.begin(), tmp.end());
  76.         tmp.assign(0, 0);
  77.     }
  78.     int k;
  79.     cin >> k;
  80.     for (int i = 0; i < k; i++) {
  81.         used.assign((2 << (n - 1)) + 1, 0);
  82.         string s1, s2;
  83.         cin >> s1 >> s2;
  84.         bool f1 = 0, f2 = 0;
  85.         dfs(g, teams[s1], teams[s2], f1);
  86.         used.assign((2 << (n - 1)) + 1, 0);
  87.         dfs(g, teams[s2], teams[s1], f2);
  88.         if (f1) cout << "Win" << endl;
  89.         else if (f2) cout << "Lose" << endl;
  90.         else cout << "Unknown" << endl;
  91.     }
  92.  
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement