湖南大学ACM程序设计新生杯大赛(同步赛)J - Piglet treasure hunt Series 2

原题链接:https://www.nowcoder.com/acm/contest/55/J

bitset水水过,手写的压位倒是炸了

#include <iostream>
#include <bitset>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXN=3e3+1;
typedef struct Node{
    int x,y;
}Node;
bitset <MAXN*4> a[MAXN];
int row,col;
char str[MAXN];
int dirx[4]={0,0,-1,1};
int diry[4]={1,-1,0,0};
inline int trans(char x){
    if(x<='9'&&x>='0') return x-'0';
    return 10+x-'A';
}
queue <Node> que;
int main(){
    while(scanf("%d %d",&row,&col)){
        getchar();
        if(row==0) break;
        int tot=0;
        for(int i=0;i<row;i++){
            scanf("%s",str);
            for(int j=0;j<col;j++){int num=trans(str[j]);
                for(int k=3;k>=0;k--){
                    if(num%2) a[i].set(j*4+k),tot++;
                    else a[i].reset(j*4+k);
                    num/=2;
                }
            }
        }
        col*=4;
        int ans=0;
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(a[i][j]){
                    a[i].reset(j);
                    que.push({i,j});Node temp;int anst=1,nowx,nowy;
                    while(!que.empty()){
                        temp=que.front();que.pop();
                        for(int i=0;i<4;i++){nowx=temp.x+dirx[i],nowy=temp.y+diry[i];
                            if(nowx>=0&&nowy>=0&&nowx<row&&nowy<col&&a[nowx][nowy]){
                                que.push({nowx,nowy});a[nowx].reset(nowy);
                                anst++;
                            }
                        }
                    }
                    if(anst>ans) ans=anst;
                    tot-=anst;
                    if(tot<=ans) break;
                }
            }
        }
        printf("%d\n",ans);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值