1091 Acute Stroke (30 分)
思路有空更新
#include <iostream>
#include <queue>
using namespace std;
int dir[6][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {-1, 0, 0}, {0, -1, 0}, {0, 0, -1}};
struct node{
int x, y, z;
};
int a[1300][130][70], vis[1300][130][70];
int n, m, l, T, ans;
int bfs(int x, int y, int z) {
int ret = 0;
node t = {x, y, z};
queue<node> q;
q.push(t);
vis[x][y][z] = 1;
while(!q.empty()) {
t = q.front();
q.pop();
ret++;
for(int i = 0; i < 6; ++i){
int xx = t.x + dir[i][0], yy = t.y + dir[i][1], zz = t.z + dir[i][2];
if(xx < 0 || x >= m || y < 0 || y >= n || z < 0 || z >=l || vis[xx][yy][zz] || a[xx][yy][zz] == 0)
continue;
vis[xx][yy][zz] = 1;
q.push({xx, yy, zz});
}
}
if(ret >= T)
return ret;
else
return 0;
}
int main() {
cin >> m >> n >> l >> T;
for(int i = 0; i < l; ++i)
for(int j = 0; j < m; ++j)
for(int k = 0; k < n; ++k)
cin >> a[j][k][i];
for(int i = 0; i < l; ++i)
for(int j = 0; j < m; ++j)
for(int k = 0; k < n; ++k)
if(!vis[j][k][i] && a[j][k][i] == 1)
ans += bfs(j, k, i);
cout << ans;
}