天梯赛练习题 L3-004 肿瘤诊断(bfs)

https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805052626026496

输入样例:
3 4 5 2
1 1 1 1
1 1 1 1
1 1 1 1
0 0 1 1
0 0 1 1
0 0 1 1
1 0 1 1
0 1 0 0
0 0 0 0
1 0 1 1
0 0 0 0
0 0 0 0
0 0 0 1
0 0 0 1
1 0 0 0
输出样例:
26

LL dz[]={1,-1,0,0,0,0},dx[]={0,0,1,-1,0,0},dy[]={0,0,0,0,1,-1};

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18,MINN=-MAXN,INF=0x3f3f3f3f;
const LL N=1e6+10,M=2023;
const LL mod=100000007;
const double PI=3.1415926535;
#define endl '\n'
LL m,n,l,t;
LL a[65][1500][150];
struct Point
{
    int x,y,z;
};
LL sum=0,ans=0;
LL dz[]={1,-1,0,0,0,0},dx[]={0,0,1,-1,0,0},dy[]={0,0,0,0,1,-1};
int bfs(LL ll,LL mm,LL nn)
{
    queue<Point> q;
    q.push({ll,mm,nn});
    a[ll][mm][nn]=0;
    sum++;
    while(q.size())
    {
        auto t=q.front();
        q.pop();
        for(LL i=0;i<6;i++)
        {
            LL zz=dz[i]+t.x,xx=dx[i]+t.y,yy=dy[i]+t.z;
            if(zz>=1&&zz<=l&&xx>=1&&xx<=m&&yy>=1&&yy<=n&&a[zz][xx][yy]==1)
            {
                q.push({zz,xx,yy});
                a[zz][xx][yy]=0;
                sum++;
            }
        }
    }
    return sum;
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        cin>>m>>n>>l>>t;
        for(int i=1;i<=l;i++)
        {
            for(int j=1;j<=m;j++)
            {
                for(int k=1;k<=n;k++)
                {
                    cin>>a[i][j][k];
                }
            }
        }
        for(int i=1;i<=l;i++)
        {
            for(int j=1;j<=m;j++)
            {
                for(int k=1;k<=n;k++)
                {
                    if(a[i][j][k]==1)
                    {
                        sum=0;
                        bfs(i,j,k);
                        if(sum>=t) ans+=sum;
                    }
                }
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
posted @ 2023-04-10 20:39  Vijurria  阅读(55)  评论(0编辑  收藏  举报