fork download
  1.  
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int sz = 50;
  6.  
  7. vector <vector<int> > knight(sz, vector <int> (sz, -1));
  8. vector <vector<int> > queen (sz, vector <int> (sz, -1));
  9.  
  10. void checkWithAssert(int v) {
  11. assert(0 <= v && v < sz);
  12. }
  13.  
  14. bool inRange(int x, int y) {
  15. return x >= 0 && x < sz && y >= 0 && y < sz;
  16. }
  17.  
  18. int grundyKnight(int x, int y) {
  19. int &ret = knight[x][y];
  20. if(ret != -1)
  21. return ret;
  22.  
  23. set <int> mex;
  24. mex.clear();
  25.  
  26. if(inRange(x-1, y-2))
  27. mex.insert(grundyKnight(x-1, y-2));
  28. if(inRange(x-2, y-1))
  29. mex.insert(grundyKnight(x-2, y-1));
  30.  
  31. ret = 0;
  32. while(mex.find(ret) != mex.end()) {
  33. ret++;
  34. }
  35. return ret;
  36. }
  37.  
  38. int grundyQueen(int x, int y) {
  39. int &ret = queen[x][y];
  40. if(ret != -1)
  41. return ret;
  42.  
  43. set <int> mex;
  44. mex.clear();
  45.  
  46. for(int i = 1; i < (int)sz; ++i) {
  47. if(inRange(x-i, y))
  48. mex.insert(grundyQueen(x-i, y));
  49. if(inRange(x, y-i))
  50. mex.insert(grundyQueen(x, y-i));
  51. if(inRange(x-i, y-i))
  52. mex.insert(grundyQueen(x-i, y-i));
  53. }
  54.  
  55. ret = 0;
  56. while(mex.find(ret) != mex.end()) {
  57. ret++;
  58. }
  59. return ret;
  60. }
  61.  
  62. bool isWin(int xk, int yk, int xq, int yq) {
  63. return (grundyKnight(xk, yk) ^ grundyQueen(xq, yq)) != 0;
  64. }
  65.  
  66. int main()
  67. {
  68. int T;
  69. cin >> T;
  70. assert(1 <= T && T <= (int)1e5);
  71.  
  72. while(T--) {
  73. int xk, yk, xq, yq;
  74. cin >> xk >> yk >> xq >> yq;
  75.  
  76. checkWithAssert(xk);
  77. checkWithAssert(yk);
  78. checkWithAssert(xq);
  79. checkWithAssert(yq);
  80.  
  81. cout << (isWin(xk, yk, xq, yq) ? "WIN" : "LOSE") << "\n";
  82. }
  83.  
  84. return 0;
  85. }
Runtime error #stdin #stdout #stderr 0s 3468KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
prog: prog.cpp:70: int main(): Assertion `1 <= T && T <= (int)1e5' failed.