Saturday 29 July 2017

Lightoj 1337 - The Crystal Maze

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cmath>
  6.  
  7. #include<algorithm>
  8. #include<string>
  9. #include<stack>
  10. #include<queue>
  11. #include<map>
  12. #include<vector>
  13.  
  14. using namespace std;
  15.  
  16. #define loop(i, n) for(int i=0; i<n; i++)
  17. #define FOR(i, s, e) for(int i=s; i<e; i++)
  18. #define pb push_back
  19. #define mem(a, v) memset(a, v, sizeof(a))
  20. #define SZ size()
  21. #define pi acos(-1.0)
  22. #define INF 1<<29
  23. #define read() freopen("input.txt", "r", stdin)
  24. #define write() freopen("output.txt", "w", stdout)
  25. #define ll long long
  26. #define mod(a) (a>0?(a):(-a))
  27. #define get(n) scanf("%d", &n)
  28. #define MAXX 505
  29. #define debug cout<<"ok"
  30.  
  31.  
  32.  
  33. int count_row, count_column;
  34. char graph[MAXX][MAXX];
  35. int* dp[MAXX][MAXX];
  36. int value[MAXX][MAXX];
  37. bool visited[MAXX][MAXX];
  38. int p, q;
  39.  
  40.  
  41.  
  42.  
  43. void dfs(int x, int y)
  44. {
  45.  
  46.     if(x<0 || x == count_row || y<0 || y == count_column || visited[x][y] || graph[x][y] == '#') return;
  47.  
  48.     dp[x][y] = &value[p][q];
  49.     visited[x][y] = true;
  50.     if(graph[x][y] == 'C')
  51.     {
  52.         value[p][q]++;
  53.     }
  54.  
  55.     dfs(x+1, y);
  56.     dfs(x-1, y);
  57.     dfs(x, y-1);
  58.     dfs(x, y+1);
  59.  
  60.     return;
  61. }
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68. int main()
  69. {
  70.     int kases, kaseno = 0;
  71.     int query;
  72.     get(kases);
  73.  
  74.  
  75.     while(kases--)
  76.     {
  77.         mem(visited, false);
  78.  
  79.  
  80.         get(count_row);
  81.         get(count_column);
  82.         get(query);
  83.  
  84.  
  85.  
  86.  
  87.         loop(i, count_row)
  88.         {
  89.             scanf("%s", graph[i]);
  90.         }
  91.  
  92.  
  93.         printf("Case %d:\n"++kaseno);
  94.  
  95.         loop(i, query)
  96.         {
  97.             get(p);
  98.             get(q);
  99.             p--;
  100.             q--;
  101.  
  102.             if(graph[p][q] == '#')
  103.             {
  104.                 printf("0\n");
  105.                 continue;
  106.             }
  107.  
  108.  
  109.             if( ! visited[p][q] )
  110.             {
  111.                 value[p][q] = 0;
  112.                 dfs(p, q);
  113.             }
  114.  
  115.             printf("%d\n"*(dp[p][q]));
  116.         }
  117.     }
  118.     return 0;
  119. }

No comments:

Post a Comment

Most Featured Post

Lightoj 1159 - Batman

http://lightoj.com/volume_showproblem.php?problem=1159 problem analysis: First i thought of this as if s1, s2 and s3 are those three str...