zoukankan      html  css  js  c++  java
  • hdu多校第十场 1009 (hdu6699) Block Breaker bfs/模拟

    题意:

    紧密排列的方块因为摩擦力一个一个稳定地挤在一起,但当一个方块的四个邻居中,上下两个至少空缺一个,左右两个至少空缺一个,则这个方块也将掉落。

    每次锤掉一个方块,求多少个方块受牵连落下。

    题解:

    可能掉落的方块总在刚刚掉落的方块上下左右四个方向出现,暴力bfs的话一个方块最多被访问4次,此复杂度可以接受。

    #include<iostream>
    #include<queue>
    #include<cstring>
    using namespace std;
    int xc[4]={1,-1,0,0};
    int yc[4]={0,0,1,-1};
    bool mapp[2005][2005];
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int n,m,q;
            scanf("%d %d %d",&n,&m,&q);
    //        memset(mapp,1,sizeof mapp);
            for(int i=0;i<=n+1;i++){
                for(int j=0;j<=m+1;j++){
                    mapp[i][j]=1;
                }
            }
            queue<int> xque,yque;
            for(int i=1;i<=q;i++){
                int x,y;
                int count=0;
                scanf("%d %d",&x,&y);
                while(!xque.empty())xque.pop();
                while(!yque.empty())yque.pop();
                
    //            printf("%d
    ",mapp[x][y]);
                
                if(mapp[x][y]==1){
                    mapp[x][y]=0;
                    for(int j=0;j<4;j++){
                        xque.push(x+xc[j]);
                        yque.push(y+yc[j]);
                    }
                    count++;
                }
                
                while(!xque.empty()){
                    x=xque.front();y=yque.front();
                    xque.pop();yque.pop();
                    if(mapp[x][y]==1 && (mapp[x+1][y]&&mapp[x-1][y])==0 && (mapp[x][y+1]&&mapp[x][y-1])==0 ){
                        mapp[x][y]=0;
                        for(int j=0;j<4;j++){
                            if(x+xc[j]>=1 && x+xc[j]<=n && y+yc[j]>=1 && y+yc[j]<=m && mapp[x+xc[j]][y+yc[j]]){
                                xque.push(x+xc[j]);
                                yque.push(y+yc[j]);
                            }
                        }
                        count++;
                    }
                }
                
                printf("%d
    ",count);
            }
        }
        
        
        return 0;
    }
  • 相关阅读:
    Bzoj 2134: [国家集训队2011]单选错位(期望)
    洛谷 P1230 智力大冲浪
    洛谷 P2695 骑士的工作
    洛谷 P1551 亲戚
    洛谷 P1111 修复公路
    洛谷 P1599 结算日
    HDU 1166 敌兵布阵
    洛谷 P2212 [USACO14MAR]浇地Watering the Fields
    洛谷 P1506 拯救oibh总部
    洛谷 P1396 营救
  • 原文地址:https://www.cnblogs.com/isakovsky/p/11409611.html
Copyright © 2011-2022 走看看