zoukankan      html  css  js  c++  java
  • Codeforces 598D (ccpc-wannafly camp day1) Igor In the Museum

    http://codeforces.com/problemset/problem/598/D

    分析:BFS,同一连通区域的周长一样,但查询过多会导致TLE,所以要将连通区域的答案储存,下次查询到该连通区域就可以直接得出结果

     1 #include<iostream>
     2 #include<sstream>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<string>
     6 #include<cstring>
     7 #include<algorithm>
     8 #include<functional>
     9 #include<iomanip>
    10 #include<numeric>
    11 #include<cmath>
    12 #include<queue>
    13 #include<vector>
    14 #include<set>
    15 #include<cctype>
    16 const double PI = acos(-1.0);
    17 const int INF = 0x3f3f3f3f;
    18 const int NINF = -INF - 1;
    19 typedef long long ll;
    20 #define MOD 1000007
    21 using namespace std;
    22 typedef pair<int, int> P;
    23 char map[1005][1005];
    24 int n, m, ans, cnt;
    25 int x, y;
    26 int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
    27 int vis[1005][1005];
    28 int num[1000025];
    29 void bfs()
    30 {
    31     int i, j;
    32     queue<P> q;
    33     q.push(P(x, y));
    34     cnt++;
    35     vis[x][y] = cnt;
    36     ans = 0;
    37     while (q.size())
    38     {
    39         P temp = q.front();
    40         q.pop();
    41         ans += 4;
    42         for (i=0; i < 4; ++i)
    43         {
    44             int nx = temp.first + dx[i];
    45             int ny = temp.second + dy[i];
    46             if (nx >= 0 && nx < n && ny >= 0 && ny < m)
    47             {
    48                 if(map[nx][ny] == '.')
    49                 {
    50                     ans--;
    51                     if(!vis[nx][ny])
    52                     {
    53                         q.push(P(nx, ny));
    54                         vis[nx][ny] = cnt;
    55                     }
    56                 }
    57             }
    58             else
    59                 ans--;
    60         }
    61     }
    62     num[cnt] = ans;
    63     cout << ans << endl;
    64 }
    65 
    66 int main()
    67 {
    68     int i, j, k;
    69     cin >> n >> m >> k;
    70     for (i = 0; i < n; ++i)
    71         cin >> map[i];
    72     memset(num, -1, sizeof(num));
    73     memset(vis, 0, sizeof(vis));
    74     cnt = 0;
    75     while (k--)
    76     {
    77         cin >> x >> y;
    78         x--, y--;
    79         if (vis[x][y] == 0)
    80             bfs();
    81         else
    82             cout << num[vis[x][y]] << endl;
    83     }
    84     return 0;
    85 }
  • 相关阅读:
    glusterfs 术语
    python 随便
    ubuntu glusterfs 配置调试
    源码生成deb包
    常用apt cli
    unexpected error ConnectionError object has no attribute
    [MFC]透明图展示
    菜鸟的mongoDB学习---(六)MongoDB 索引
    Keyboard的显示与隐藏
    HDU 4268 Alice and Bob(贪心+Multiset的应用)
  • 原文地址:https://www.cnblogs.com/veasky/p/11223467.html
Copyright © 2011-2022 走看看