Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <locale>
- #include <set>
- #include <cstdio>
- #include <map>
- #include <algorithm>
- #include <ctype.h>
- #include <cmath>
- #include <cstdlib>
- #include <utility>
- #include <queue>
- #include <iomanip>
- #include <stack>
- #define _USE_MATH_DEFINES
- using namespace std;
- vector<int> used;;
- void dfs(vector<vector<int> > &g, int s, int p, bool &flag)
- {
- int i;
- used[s] = 1;
- if (flag) return;
- for (i = 0; i < g[s].size(); i++)
- if (!used[g[s][i]]) {
- if (g[s][i] == p) {
- flag = 1;
- return;
- }
- dfs(g, g[s][i], p, flag);
- }
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt", "w", stdout);
- int n;
- cin >> n;
- map<string, int> teams;
- for (long long i = 0; i < (2 << (n - 1)); i++) {
- string name;
- cin >> name;
- teams[name] = i + 1;
- }
- string res;
- cin >> res;
- vector<vector<int> > g((2 << (n - 1)) + 1);
- vector<int> list((2 << (n - 1)));
- for (int i = 0; i < 2 << (n - 1); i++) {
- list[i] = i+1;
- }
- int cnt = 0;
- vector<int> tmp;
- for (int i = 1; i <= n; i++) {
- for (int j = 1; j < list.size(); j += 2, cnt++) {
- if (res[cnt] == 'W') {
- g[list[j - 1]].push_back(list[j]);
- tmp.push_back(list[j - 1]);
- }
- else {
- g[list[j]].push_back(list[j - 1]);
- tmp.push_back(list[j]);
- }
- }
- list.assign(tmp.begin(), tmp.end());
- tmp.assign(0, 0);
- }
- int k;
- cin >> k;
- for (int i = 0; i < k; i++) {
- used.assign((2 << (n - 1)) + 1, 0);
- string s1, s2;
- cin >> s1 >> s2;
- bool f1 = 0, f2 = 0;
- dfs(g, teams[s1], teams[s2], f1);
- used.assign((2 << (n - 1)) + 1, 0);
- dfs(g, teams[s2], teams[s1], f2);
- if (f1) cout << "Win" << endl;
- else if (f2) cout << "Lose" << endl;
- else cout << "Unknown" << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement