4eyes4u

Untitled

Mar 28th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N=1010;
  5. const int INF=987654321;
  6.  
  7. set<int> row[N];
  8. int n, m, q;
  9. char s[N];
  10.  
  11. int aps (int x)
  12. {
  13.     if (x<0) return -x;
  14.     return x;
  15. }
  16.  
  17. int ok (int a, int b, int r, int c)
  18. {
  19.     int dr=aps(a-r);
  20.     int dc=aps(b-c);
  21.     int d=min(dr, dc);
  22.     return (dr+dc-d);
  23. }
  24.  
  25. void solve (int r, int c)
  26. {
  27.     int ret=INF, red, kol;
  28.     for (int i=1;i<=n;i++)
  29.     {
  30.         if (row[i].empty()) continue;
  31.         auto it=row[i].upper_bound(c);
  32.         if (it==row[i].end()) it--;
  33.  
  34.         int cur=ok(r, c, i, *it);
  35.         if (cur<ret)
  36.         {
  37.             ret=cur;
  38.             red=i;
  39.             kol=*it;
  40.         }
  41.  
  42.         if (it!=row[i].begin()) it--;
  43.         cur=ok(r, c, i, *it);
  44.         if (cur<ret)
  45.         {
  46.             ret=cur;
  47.             red=i;
  48.             kol=*it;
  49.         }
  50.     }
  51.     if (ret==INF) printf ("-1\n");
  52.     else printf ("%d %d\n", red, kol);
  53. }
  54.  
  55. int main()
  56. {
  57.     freopen("input.txt", "r", stdin);
  58.     freopen("output.txt", "w", stdout);
  59.  
  60.     scanf ("%d%d", &n, &m);
  61.     for (int i=1;i<=n;i++)
  62.     {
  63.         scanf ("%s", s+1);
  64.         for (int j=1;j<=m;j++)
  65.         {
  66.             if (s[j]=='1') row[i].insert(j);
  67.         }
  68.     }
  69.  
  70.     scanf ("%d", &q);
  71.     while (q--)
  72.     {
  73.         int com, r, c;
  74.         scanf ("%d%d%d", &com, &r, &c);
  75.         if (com==1) row[r].insert(c);
  76.         else if (com==2) row[r].erase(c);
  77.         else solve (r, c);
  78.     }
  79.  
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment