Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <string>
  5. #include <math.h>
  6. #include <algorithm>
  7. #include <map>
  8. #include <set>
  9. #include <sstream>
  10. #include <queue>
  11.  
  12. #define sz(x) ((int)x.size())
  13. #define all(x) (x).begin(), (x).end()
  14. #define pb(x) push_back(x)
  15. #define mp(x, y) make_pair(x, y)
  16.  
  17. typedef long long int64;
  18.  
  19. using namespace std;
  20.  
  21. vector<vector<int>> g;
  22. vector<bool> win;
  23. vector<bool> loose;
  24. vector<bool> used;
  25. vector<int> degree;
  26.  
  27. void dfs (int v) {
  28.     used[v] = true;
  29.     for (int i : g[v])
  30.         if (!used[i]) {
  31.             if (loose[v])
  32.                 win[i] = true;
  33.             else if (--degree[i] == 0)
  34.                 loose[i] = true;
  35.             else
  36.                 continue;
  37.             dfs (i);
  38.         }
  39. }
  40.  
  41. int main() {
  42.     int n;
  43.     cin >> n;
  44.     int k1;
  45.     cin >> k1;
  46.     vector<int> moves1(k1);
  47.     for (int i = 0; i < k1; ++i) {
  48.         cin >> moves1[i];
  49.     }
  50.     int k2;
  51.     cin >> k2;
  52.     vector<int> moves2(k2);
  53.     for (int i = 0; i < k2; ++i) {
  54.         cin >> moves2[i];
  55.     }
  56.     g.resize(2*n);
  57.     for (int i = 0; i < n; ++i) {
  58.         for (int x : moves2) {
  59.             if ((i - x) % n != 0) {
  60.                 g[i].pb(n + (n + i - x) % n);
  61.             }
  62.         }
  63.     }
  64.     for (int i = n; i < 2 * n; ++i) {
  65.         for (int x : moves1) {
  66.             if ((i - x) % n != 0) {
  67.                 g[i].pb((n + i - x) % n);
  68.             }
  69.         }
  70.     }
  71.     win.assign(2 * n, false);
  72.     loose.assign(2 * n, false);
  73.     used.assign(2 *n, false);
  74.     loose[0] = true;
  75.     loose[n] = true;
  76.     degree.resize(2 * n);
  77.     for (int i = 0; i < n; ++i) {
  78.         degree[i] = k1;
  79.     }
  80.     for (int i = n; i < 2 * n; ++i) {
  81.         degree[i] = k2;
  82.     }
  83.  
  84.     dfs(0);
  85.     if (!used[n]) dfs(n);
  86.  
  87.     for (int i = 1; i < n; ++i) {
  88.         if (win[i]) {
  89.             cout << "Win ";
  90.             continue;
  91.         }
  92.         if (loose[i]) {
  93.             cout << "Lose ";
  94.             continue;
  95.         }
  96.         cout << "Loop ";
  97.     }
  98.     cout << endl;
  99.     for (int i = n + 1; i < 2 * n; ++i) {
  100.         if (win[i]) {
  101.             cout << "Win ";
  102.             continue;
  103.         }
  104.         if (loose[i]) {
  105.             cout << "Lose ";
  106.             continue;
  107.         }
  108.         cout << "Loop ";
  109.     }
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement