yoyoboyss

Untitled

Feb 28th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int NMAX = 505;
  5.  
  6. int di[4] = {0, 0, -1, 1};
  7. int dj[4] = {-1, 1, 0, 0};
  8.  
  9. queue <pair <int, int> > Q;
  10.  
  11. int p, N, M, T, startx, starty, k, S, nr, cas, Min = 1e8;
  12. char binar[10];
  13.  
  14. int H[NMAX][NMAX], Lee[NMAX][NMAX];
  15. bool Par[NMAX][NMAX], food[NMAX][NMAX];
  16.  
  17. int cer_1(){
  18. bool ok;
  19. int bin, L, verf;
  20.  
  21. for(int i=1; i<=N; i++){
  22. for(int j=1; j<=M; j++){
  23. if(i != startx || j != starty){
  24. ok = 1;
  25. bin = (H[i][j] ^ k);
  26. for(int i=1; i<=S; i++){
  27. if(bin % 2 == 0)
  28. ok = 0;
  29. bin /= 2;
  30. }
  31. if(ok){
  32. nr++;
  33. if(p == 2)
  34. Par[i][j] = 1;
  35. }
  36. }
  37. }
  38. }
  39. }
  40.  
  41. bool OK(int i, int j){
  42. if(i < 1 || j < 1 || i > N || j > M)
  43. return false;
  44. if(!Par[i][j] || Lee[i][j])
  45. return false;
  46. return true;
  47. }
  48.  
  49. int cer_2(){
  50. Q.push(make_pair(startx, starty));
  51. Lee[startx][starty] = 0;
  52. while(!Q.empty()){
  53. int i = Q.front().first;
  54. int j = Q.front().second;
  55. for(int d = 0; d < 4; d++){
  56. int i_1 = i + di[d];
  57. int j_1 = j + dj[d];
  58. if(OK(i_1, j_1) && (i_1 != startx || j_1 != starty)){
  59. Lee[i_1][j_1] = Lee[i][j] + 1;
  60. Q.push(make_pair(i_1, j_1));
  61. if(food[i_1][j_1]){
  62. if(Lee[i_1][j_1] < Min)
  63. Min = Lee[i_1][j_1];
  64. cas++;
  65. }
  66. }
  67. }
  68. Q.pop();
  69. }
  70. }
  71.  
  72. int main(){
  73.  
  74. freopen("panda.in", "r", stdin);
  75. freopen("panda.out", "w", stdout);
  76.  
  77. scanf("%d%d%d%d%d%d%d%d", &p, &N, &M, &T, &startx, &starty, &k, &S);
  78. for(int i=1; i<=T; i++){
  79. int a, b;
  80. scanf("%d%d", &a, &b);
  81. food[a][b] = 1;
  82. }
  83. for(int i=1; i<=N; i++){
  84. for(int j=1; j<=M; j++){
  85. int x;
  86. scanf("%d", &x);
  87. H[i][j] = x;
  88. }
  89. }
  90.  
  91. if(p == 1){
  92. cer_1();
  93. printf("%d", nr);
  94. } else {
  95. Par[startx][starty] = -1;
  96. cer_1();
  97. cer_2();
  98. printf("%d %d", Min, cas);
  99. }
  100.  
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment