Advertisement
Guest User

roflanka

a guest
Apr 4th, 2020
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.21 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define pb push_back
  6. #define int long long
  7. #define X first
  8. #define Y second
  9. #define ld long double
  10. #define SZ(x) ((int)(x).size())
  11. #define Pudger(i,a,n) for (int i=a;i<n;i++)
  12. #define Pudge(i,n) Pudger(i,0,n)
  13. #define Rudger(o,a,n) for (int o=n-1;o>=a;o--)
  14. #define Rudge(o,a) Ror(o,0,a)
  15. #define Sniper(axe,x) for (auto& axe: x)
  16. #define Za_delo_beryotsa_myasnik ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  17. #define Ya_myasnik_a_ti_myasco freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
  18. #define all(x) x.begin(), x.end()
  19.  
  20. typedef long long LL;
  21. typedef long double LD;
  22. typedef vector<int> VI;
  23. typedef pair<int,int> PII;
  24. typedef string ST;
  25.  
  26. const ld PI = 4*atan((ld)1);
  27. const LL mod = 1e5 + 7;
  28. const LL MAXN = 1e5+7;
  29.  
  30. template<class T>
  31. istream& operator >> (istream& in, vector<T>& v){ for (auto &x : v) { in >> x; } return in; }
  32.  
  33. template<class T>
  34. istream& operator >> (istream& in, pair<T, T> & v){ in >> v.X >> v.Y;return in; }
  35.  
  36. template<class T>
  37. ostream& operator << (ostream& out, pair<T, T> & v){ out << v.X << " " << v.Y;return out; }
  38.  
  39. template<class T>
  40. ostream& operator << (ostream& out, vector<T> & v){ for (auto x : v) { out << x << " "; } return out; }
  41.  
  42. vector<int> mnoj(int pudge){
  43.     int i = 2;
  44.     vector<int> a;
  45.     while(i*i < pudge){
  46.         while(pudge % i == 0){
  47.             pudge /= i;
  48.             a.pb(i);
  49.         }
  50.         i++;
  51.     }
  52.     if(pudge>1)
  53.         a.pb(pudge);
  54.     return a;
  55. }
  56.  
  57. int Binsearch(VI &a,int x){
  58.     int hight, low, mid;
  59.     hight = SZ(a)-1;
  60.     low = 0;
  61.     Pudge(i,1000){
  62.         mid = (hight+low)/2;
  63.         if(a[mid]>=x){
  64.             hight = mid;
  65.         }
  66.         else
  67.             low = mid;
  68.     }
  69.     return low;
  70. }
  71.  
  72. ST str, tmp, st;
  73. int n,d = -1, cur,k,g,g1,cnt,b,k1 = -1,b1 = -1, cnt1, nn, kk, bb, m, ans12 = 0;
  74. queue<pair<int, int>> ark;
  75.  
  76. main(){
  77.     Za_delo_beryotsa_myasnik;
  78.     //Ya_myasnik_a_ti_myasco
  79.     cin >> n >> m;
  80.     vector<vector<char>> graph(n, vector<char>(m));
  81.     vector<VI> used(n, vector<int>(m));
  82.     vector<vector<PII>> ans(n, vector<PII>(m));
  83.     vector<VI> dist(n, VI(m));
  84.     vector<PII> arka{
  85.         { 1,0 },
  86.         { -1,0 },
  87.         { 0,1 },
  88.         { 0,-1 }
  89.     };
  90.    
  91.     Pudge(i,n){
  92.         Pudge(j,m){
  93.             dist[i][j] = -1;
  94.             cin >> graph[i][j];
  95.             if(graph[i][j] == '*'){
  96.                 k = i;
  97.                 b = j;
  98.             }
  99.  
  100.         }      
  101.     }
  102.     cin >> nn;
  103.     vector<PII> belmandoe;
  104.     Pudge(i,nn){
  105.         cin >> kk >> bb;
  106.         kk--;
  107.         bb--;
  108.         belmandoe.pb(make_pair(kk,bb));
  109.         graph[kk][bb] = 'X';
  110.     }
  111.     ark.push(make_pair(k,b));  
  112.     used[k][b] = 1;
  113.     while(!ark.empty()){
  114.         g = ark.front().X;
  115.         g1 = ark.front().Y;
  116.         ark.pop();
  117.         Pudge(i,4){
  118.             if( (0 <= g + arka[i].X) and ( g + arka[i].X < n) and (0 <= g1 + arka[i].Y) and (g1 + arka[i].Y< n) ){
  119.                 if( graph[ arka[i].X + g ][ g1 + arka[i].Y ] == '0'){
  120.                     if(!used[ g + arka[i].X ][ g1 + arka[i].Y ]){
  121.                         used[ g + arka[i].X ][ g1 + arka[i].Y ] = 1;
  122.                         ark.push(make_pair(g + arka[i].X , g1 + arka[i].Y));
  123.                         ans[ g + arka[i].X ][ g1 + arka[i].Y ] = make_pair(g,g1);
  124.                         dist[ g + arka[i].X ][ g1 + arka[i].Y ] = dist[g][g1]+1;
  125.                     }
  126.                 }
  127.                 if( graph[ arka[i].X + g ][ g1 + arka[i].Y ] == 'X'){
  128.                     k1 = g+arka[i].X;
  129.                     b1 = g1+arka[i].Y;
  130.                     used[ arka[i].X + g ][ g1 + arka[i].Y ] = 1;
  131.                     ans[ arka[i].X + g ][ g1 + arka[i].Y ] = make_pair(g,g1);
  132.                     dist[ g + arka[i].X ][ g1 + arka[i].Y ] = dist[g][g1]+1;
  133.                 }
  134.             }
  135.         }
  136.     }
  137.     if(k1<0 and b1<0){
  138.         cout << -1;
  139.         return 0;
  140.     }
  141.     int mih = 101;
  142.     Pudge(i,nn){
  143.         if(dist[belmandoe[i].X][belmandoe[i].Y]<mih and dist[belmandoe[i].X][belmandoe[i].Y] != -1){
  144.             mih = dist[belmandoe[i].X][belmandoe[i].Y];
  145.             d = i;
  146.         }
  147.     }
  148.     cout << d+1;
  149.     return 0;
  150.    
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement