Advertisement
ProgramoBien

patada chuck

Mar 10th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define rep(i,j,n) for(int i = int(j); i < int(n); ++i)
  6.  
  7. struct pi{
  8.     int f, c;
  9.     pi(int a, int b): f(a), c(b){}
  10.     pi(){}
  11. };
  12.  
  13. int n, m, d;
  14. pi ch, xx;
  15. vector<vector<char>> v;
  16. vector<vector<int>> g;
  17. vector<bool> vis;
  18.  
  19. int mf[8] = {-1, 0, 1,  0, 1, -1,  1, -1},
  20.     mc[8] = { 0, 1, 0, -1, 1, -1, -1,  1};
  21.  
  22. int ind(const pi& p){ return p.f*m + p.c;}
  23. pi fpi(const int& i){ return pi(i/m, i%m);}
  24.  
  25. void dfs(){
  26.     stack<int> s;
  27.     int idx = ind(ch);
  28.     s.push(idx);
  29.     vis[idx] = true;
  30.     while(!s.empty()){
  31.         int vtx = s.top();
  32.         s.pop();
  33.         rep(i, 0, g[vtx].size()){
  34.             int nei = g[vtx][i];
  35.             if(!vis[nei]){
  36.                 vis[nei] = true;
  37.                 s.push(nei);
  38.             }
  39.         }
  40.     }
  41. }
  42.  
  43. void _solve(){
  44.     //addEdge between pi(i,j) and pi(x,y) such that v[i][j], v[x][y] sea letra
  45.     //max(abs(i-x), abs(j-y)) <= d
  46.     rep(i, 0, n){
  47.         rep(j, 0, m){
  48.             char c = v[i][j];
  49.             if(c != '.' and c != 'C')
  50.             rep(k, 0, n){
  51.                 rep(l, 0, m){
  52.                     char c2 = v[k][l];
  53.                     if(c2 != '.' and c != 'C'){
  54.                         int dist = max(abs(i-k), abs(j-l));
  55.                         if(dist <= d){
  56.                             int n1 = i*m + j,
  57.                                 n2 = k*m + l;
  58.                             g[n1].push_back(n2);
  59.                             g[n2].push_back(n1);
  60.                         }
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.     }
  66.    
  67.     dfs();
  68.     rep(i, 0, n){
  69.         rep(j, 0, m){
  70.             char c = v[i][j];
  71.             if(c != '.' and c != 'C'){
  72.                 if(vis[ind(pi(i, j))]) c = '*';
  73.             }
  74.             cout << c;
  75.         }
  76.         cout << endl;
  77.     }
  78. }
  79.  
  80. void _input(){
  81.     cin >> n >> m >> d;
  82.     vector<vector<char>> a(n, vector<char> (m));
  83.     rep(i, 0, n)
  84.         rep(j, 0, m){
  85.             cin >> a[i][j];
  86.             if(a[i][j] == 'C') ch = pi(i, j);
  87.             else if(a[i][j] == 'X') xx = pi(i, j);
  88.         }
  89.     v = a;
  90.     g = vector<vector<int>> (n*m);
  91.     vis = vector<bool> (n*m, false);
  92. }
  93.  
  94. int main()
  95. {
  96.     while(q--){
  97.         _input();
  98.         _solve();
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement