fork download
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <vector>
  7. #include <string>
  8. #include <map>
  9. #include <queue>
  10. #include <set>
  11. #include <cassert>
  12.  
  13. using namespace std;
  14.  
  15. #define S(x) scanf("%d",&x)
  16. #define SS(x,y) scanf("%d%d",&x,&y)
  17. #define all(c) (c).begin(),(c).end()
  18. #define sz(c) int((c).size())
  19. #define pb push_back
  20. #define present(c,x) ((c).find(x) != (c).end())
  21. #define rep(i,x,y) for(int i = x; i <= y; i++)
  22. #define REV(i,x,y) for(int i = x; i >= y; i--)
  23. #define foreach(c,itr) for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)
  24. #define FILL(a,v) memset(a,v,sizeof(a))
  25. #define DB(x) cerr<<#x<<" = "<<x<<endl
  26. #define debugarr(A,a,b) cerr<<#A<<" : ";rep(i,a,b) cerr<<A[i]<<" ";cerr<<endl;
  27. #define mp(x,y) make_pair(x,y);
  28. //#define R(x) ((rand()%x) + 1)
  29.  
  30. typedef long long int LL;
  31. typedef vector<int> vi;
  32. typedef vector<vi> vvi;
  33. typedef pair<LL,LL> ii;
  34. typedef vector<ii> vii;
  35.  
  36. /* ------------------------Main Code----------------------- */
  37. const int MAX = 100001;
  38.  
  39. void test()
  40. {
  41. int A[10][10][10] = {0};
  42. rep(i,0,9){
  43. REV(j,9,0)
  44. if(!((i+j)&1)) A[i][j][0] = 1;
  45. }
  46. rep(k,1,9){
  47. rep(i,1,9){
  48. int tmp;
  49. set<int> s;
  50. rep(l,1,k){
  51. tmp = A[i][9][k-l] ^ A[i-1][9][l-1];
  52. s.insert(tmp);
  53. }
  54. s.insert(A[i-1][9][k]);
  55. A[i][9][k] = sz(s);
  56. int cnt = 0;
  57. foreach(s,itr){
  58. if(cnt != *itr){
  59. A[i][9][k] = cnt;
  60. break;
  61. }
  62. cnt++;
  63. }
  64. }
  65. REV(i,8,0){
  66. int tmp;
  67. set<int> s;
  68. rep(l,1,k){
  69. tmp = A[0][i][k-l] ^ A[0][i+1][l-1];
  70. s.insert(tmp);
  71. }
  72. s.insert(A[0][i+1][k]);
  73. A[0][i][k] = sz(s);
  74. int cnt = 0;
  75. foreach(s,itr){
  76. if(cnt != *itr){
  77. A[0][i][k] = cnt;
  78. break;
  79. }
  80. cnt++;
  81. }
  82. }
  83. rep(i,1,9){
  84. REV(j,8,0){
  85. set<int> s;
  86. int tmp;
  87. rep(l,1,k){
  88. tmp = A[i][j][k-l] ^ A[i-1][j][l-1];
  89. s.insert(tmp);
  90. tmp = A[i][j][k-l] ^ A[i][j+1][l-1];
  91. s.insert(tmp);
  92. }
  93. s.insert(A[i-1][j][k]);
  94. s.insert(A[i][j+1][k]);
  95. //sort(all(v));
  96. A[i][j][k] = sz(s);
  97. int cnt = 0;
  98. foreach(s,itr){
  99. if(cnt != *itr){
  100. A[i][j][k] = cnt;
  101. break;
  102. }
  103. cnt++;
  104. }
  105. }
  106. }
  107. }
  108. rep(k,0,9){
  109. printf("\n");
  110. rep(i,0,9){
  111. rep(j,0,9) printf("%d ",A[i][j][k]);
  112. printf("\n");
  113. }
  114. printf("\n");
  115. }
  116. }
  117.  
  118. map<ii,int> points;
  119.  
  120. int main()
  121. {
  122. //brute to test the grundy values
  123. //test();
  124.  
  125. LL n, m;
  126. int p;
  127. scanf("%lld%lld",&n,&m);
  128. S(p);
  129. int badpos = ((m+1)&1), grundy = 0;
  130. rep(i,0,p-1){
  131. LL x, y;
  132. scanf("%lld%lld",&x,&y);
  133. ii tmp = mp(x,y);
  134. if(((x+y)&1) == badpos) continue;
  135. points[tmp]++;
  136. }
  137. foreach(points,itr)
  138. grundy ^= itr->second;
  139. printf(grundy ? "Yes\n" : "No\n");
  140. return 0;
  141. }
Success #stdin #stdout 0s 3464KB
stdin
3 3 1
2 2
stdout
No