zoukankan      html  css  js  c++  java
  • 【HDOJ】3451 Beat drop

    BFS。当水滴破裂飞溅后,直到碰到水滴才会停止(观察case1)。同时,考虑当水滴飞溅到点(x,y)并且该点同一时间破裂的情况,该水滴算作吸收。

      1 /* 3451 */
      2 #include <iostream>
      3 #include <queue>
      4 #include <cstdio>
      5 #include <cstring>
      6 #include <cstdlib>
      7 using namespace std;
      8 
      9 #define MAXN 105
     10 
     11 typedef struct node_t{
     12     int x,y,d,t;
     13     node_t() {}
     14     node_t(int xx, int yy, int dd, int tt) {
     15         x = xx; y = yy; d = dd; t = tt;
     16     }
     17 } node_t;
     18 
     19 node_t beg;
     20 int bx, by;
     21 int n, m, l;
     22 int map[MAXN][MAXN];
     23 int t[MAXN][MAXN];
     24 int dir[4][2] = {
     25     -1,0,1,0,0,-1,0,1
     26 };
     27 
     28 inline bool check(int x, int y) {
     29     return x<0 || x>=n || y<0 || y>=m;
     30 }
     31 
     32 bool isValid() {
     33     int i, j;
     34     
     35     for (i=0; i<n; ++i)
     36         for (j=0; j<m; ++j)
     37             if (map[i][j])
     38                 return false;
     39     return true;
     40 }
     41 
     42 void bfs() {
     43     int x, y, d;
     44     int i, j, k;
     45     node_t nd;
     46     queue<node_t> Q;
     47     
     48     memset(t, 0, sizeof(t));
     49     if (map[bx][by] == l) {
     50         map[bx][by] = 0;
     51         t[bx][by] = 1;
     52         nd.t = 2;
     53         for (i=0; i<4; ++i) {
     54             nd.x = bx + dir[i][0];
     55             nd.y = by + dir[i][1];
     56             if (check(nd.x, nd.y))
     57                 continue;
     58             nd.d = i;
     59             Q.push(nd);
     60         }
     61     } else {
     62         ++map[bx][by];
     63         return ;
     64     }
     65     
     66     while (!Q.empty()) {
     67         nd = Q.front();
     68         Q.pop();
     69         if (map[nd.x][nd.y] == l) {
     70             // break
     71             map[nd.x][nd.y] = 0;
     72             t[nd.x][nd.y] = nd.t;
     73             for (i=0; i<4; ++i) {
     74                 x = nd.x + dir[i][0];
     75                 y = nd.y + dir[i][1];
     76                 if (check(x, y))
     77                     continue;
     78                 Q.push(node_t(x, y, i, nd.t+1));
     79             }
     80         } else if (map[nd.x][nd.y]) {
     81             // absorb
     82             ++map[nd.x][nd.y];
     83         } else if (t[nd.x][nd.y] != nd.t) {
     84             // no drop, continue fly
     85             x = nd.x + dir[nd.d][0];
     86             y = nd.y + dir[nd.d][1];
     87             if (check(x, y))
     88                 continue;
     89             Q.push(node_t(x, y, nd.d, nd.t+1));
     90         }
     91     }
     92 }
     93 
     94 int main() {
     95     int t;
     96     int i, j, k;
     97     bool flag;
     98     
     99     #ifndef ONLINE_JUDGE
    100         freopen("data.in", "r", stdin);
    101         freopen("data.out", "w", stdout);
    102     #endif
    103     
    104     scanf("%d", &t);
    105     while (t--) {
    106         scanf("%d %d %d", &n, &m, &l);
    107         flag = false;
    108         for (i=0; i<n; ++i) {
    109             for (j=0; j<m; ++j) {
    110                 scanf("%d", &map[i][j]);
    111             }
    112         }
    113         flag = isValid();
    114         scanf("%d", &k);
    115         while (k--) {
    116             scanf("%d %d", &bx, &by);
    117             --bx; --by;
    118             if (flag == false) {
    119                 bfs();
    120                 flag = isValid();
    121             }
    122         }
    123         if (flag) {
    124             puts("YES");
    125         } else {
    126             puts("NO");
    127             for (i=0; i<n; ++i) {
    128                 for (j=0; j<m; ++j)
    129                     printf("%d ", map[i][j]);
    130                 printf("
    ");
    131             }
    132         }
    133     }
    134     
    135     return 0;
    136 }
  • 相关阅读:
    5.Spring高级装配(根据profile的激活状态决定使用的环境) 以及 条件化 Bean
    4.SpringJunit4ClassRunner
    3.Spring配置可选方案
    2.Spring容器bean的生命周期
    1.使用spring上下文容纳你的Bean
    maven 打包跳过 Junit test
    HTML5中meta name="viewport"
    二、JavaScript this
    VIM_插件
    VBS_DO...Loop
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4302889.html
Copyright © 2011-2022 走看看