L3-004. 肿瘤诊断

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环。给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积。

输入格式:

输入第一行给出4个正整数:M、N、L、T,其中M和N是每张切片的尺寸(即每张切片是一个M×N的像素矩阵。最大分辨率是1286×128);L(<=60)是切片的张数;T是一个整数阈值(若疑似肿瘤的连通体体积小于T,则该小块忽略不计)。

最后给出L张切片。每张用一个由0和1组成的M×N的矩阵表示,其中1表示疑似肿瘤的像素,0表示正常像素。由于切片厚度可以认为是一个常数,于是我们只要数连通体中1的个数就可以得到体积了。麻烦的是,可能存在多个肿瘤,这时我们只统计那些体积不小于T的。两个像素被认为是“连通的”,如果它们有一个共同的切面,如下图所示,所有6个红色的像素都与蓝色的像素连通。


Figure 1

输出格式:

在一行中输出肿瘤的总体积。

输入样例:

  1. 3 4 5 2
  2. 1 1 1 1
  3. 1 1 1 1
  4. 1 1 1 1
  5. 0 0 1 1
  6. 0 0 1 1
  7. 0 0 1 1
  8. 1 0 1 1
  9. 0 1 0 0
  10. 0 0 0 0
  11. 1 0 1 1
  12. 0 0 0 0
  13. 0 0 0 0
  14. 0 0 0 1
  15. 0 0 0 1
  16. 1 0 0 0

输出样例:

  1. 26
  2.  
  3. 思路:上下前后左右六个方向搜索即可,用BFS好一些,dfs会爆
    AC代码:
  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<vector>
  7. #include<string>
  8. #include<iomanip>
  9. #include<map>
  10. #include<stack>
  11. #include<set>
  12. #include<queue>
  13. using namespace std;
  14. #define N_MAX 1000+2
  15. #define INF 0x3f3f3f3f
  16. int N,M,L,T;//T为最小面积限制
  17. int Map[][][];
  18. bool vis[][][];
  19. int pos_z[] ={,,,,,-};
  20. int pos_x[] ={,,,-,,};
  21. int pos_y[] ={,-,,,,};
  22. int area;
  23. struct point {
  24. int x, y, z;
  25. point() {}
  26. point(int x,int y,int z):x(x),y(y),z(z) {}
  27. };
  28.  
  29. void dfs(int x, int y, int z) {
  30. vis[z][x][y] = ;
  31. area++;
  32. for (int i = ; i < ; i++) {
  33. int Z = z+pos_z[i],X=x+pos_x[i],Y=y+pos_y[i];
  34. if (X >= && X <N && Y >= && Y < M && Z >= && Z < L && !vis[Z][X][Y]&&Map[Z][X][Y]==) {
  35. dfs(X, Y, Z);
  36. }
  37. }
  38. }
  39.  
  40. void bfs(int x,int y,int z) {
  41. queue<point>que;
  42. que.push(point(x,y,z));
  43. vis[z][x][y] = true;
  44. while (!que.empty()) {
  45. point P = que.front();que.pop();
  46. area++;
  47. for (int i = ; i < ;i++) {
  48. int Z =P.z + pos_z[i], X = P.x + pos_x[i], Y = P.y + pos_y[i];
  49. if (X >= && X <N && Y >= && Y < M && Z >= && Z < L && !vis[Z][X][Y] && Map[Z][X][Y] == ) {
  50. vis[Z][X][Y] = true;
  51. que.push(point(X, Y, Z));
  52. }
  53. }
  54. }
  55. }
  56.  
  57. int main() {
  58. while (scanf("%d%d%d%d", &N,&M,&L,&T) != EOF) {
  59. memset(vis,,sizeof(vis));
  60. for (int i = ; i < L;i++) {
  61. for (int j = ; j < N;j++) {
  62. for (int k = ; k < M;k++) {
  63. scanf("%d", &Map[i][j][k]);
  64. }
  65. }
  66. }
  67. int cnt = ;
  68. for (int i = ; i < L; i++) {
  69. for (int j = ; j < N; j++) {
  70. for (int k = ; k < M; k++) {
  71. area = ;
  72. if (!vis[i][j][k]&&Map[i][j][k]==) {
  73. bfs(j, k, i);
  74. if (area >= T) {
  75. cnt += area;
  76. }
  77. }
  78. }
  79. }
  80. }
  81. printf("%d\n",cnt);
  82. }
  83. return ;
  84. }

pat 甲级 团体天梯 L3-004. 肿瘤诊断的更多相关文章

  1. pat甲级 团体天梯赛 L2-022. 重排链表

    L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...

  2. PAT天梯赛L3-004 肿瘤诊断

    题目链接:点击打开链接 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是每 ...

  3. 团体程序设计天梯赛 L3-004. 肿瘤诊断

    数组的大小不能开太大,否则会出现段错误 用bfs而不用dfs,dfs存储太多中间过程,会超内存 #include <stdio.h> #include <stdlib.h> # ...

  4. PAT天梯赛练习题——L3-004. 肿瘤诊断(三维连通块并查集)

    L3-004. 肿瘤诊断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶 ...

  5. L3-004. 肿瘤诊断

    L3-004. 肿瘤诊断 题目链接:https://www.patest.cn/contests/gplt/L3-004 BFS 之前尝试使用递归dfs,提交后发现有两个段错误,发现递归层数太多,然后 ...

  6. PAT甲级题解(慢慢刷中)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6102219.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. PAT甲级1131. Subway Map

    PAT甲级1131. Subway Map 题意: 在大城市,地铁系统对访客总是看起来很复杂.给你一些感觉,下图显示了北京地铁的地图.现在你应该帮助人们掌握你的电脑技能!鉴于您的用户的起始位置,您的任 ...

  8. PAT甲级1127. ZigZagging on a Tree

    PAT甲级1127. ZigZagging on a Tree 题意: 假设二叉树中的所有键都是不同的正整数.一个唯一的二叉树可以通过给定的一对后序和顺序遍历序列来确定.这是一个简单的标准程序,可以按 ...

  9. PAT甲级1123. Is It a Complete AVL Tree

    PAT甲级1123. Is It a Complete AVL Tree 题意: 在AVL树中,任何节点的两个子树的高度最多有一个;如果在任何时候它们不同于一个,则重新平衡来恢复此属性.图1-4说明了 ...

随机推荐

  1. 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)

    首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...

  2. 【线性基 集合hash】uoj#138. 【UER #3】开学前的涂鸦

    还需要加强分析题目特殊性质,设计对应特殊算法,少想多写大力dfs剪枝不要管MLETLE直接上的能力 红包是一个有艺术细胞的男孩子. 红包由于NOI惨挂心情不好,暑假作业又多,于是他开始在作业本上涂鸦. ...

  3. 六、MySQL 删除数据库

    MySQL 删除数据库 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限. 在删除数据库过 ...

  4. JZOJ 4743. 积木

    Description Input Output Sample Input 38 7 63 9 41 10 5 Sample Output 18

  5. Federated引擎

    Federated就像他的名字所说“联盟”,其作用就是把两个不同区域的数据库联系起来,以至可以访问在远程数据库的表中的数据,而不是本地的表. 1.进入mysql命令行,查看是否已安装Federated ...

  6. 662. Maximum Width of Binary Tree

    https://leetcode.com/problems/maximum-width-of-binary-tree/description/ /** * Definition for a binar ...

  7. HOJ 13819 Height map

    昨天校内比赛做了一个很有意思的题,体面如图: 题目大概意思是,给出一个俯视图矩阵,矩阵内元素表示当前位置有多少个方块,最后要求输出该立体图形中面的数量. 首先给出一组数据: 3 42 1 2 11 2 ...

  8. utf8和utf8mb4区别

    原文链接 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编 ...

  9. (Winform)控件中添加GIF图片以及运用双缓冲使其不闪烁以及背景是gif时使控件(如panel)变透明

    Image img = Image.FromFile(@"C:\Users\joeymary\Desktop\3.gif"); pictureBox1.Image =img.Clo ...

  10. 定时任务之crond服务

    计划任务分为一次性计划任务与长期性计划任务 一次性计划任务:今天11:25执行重启网卡操作,执行结束 即任务消失  一次性计划任务格式: 创建:"at 时间" #默认采用的是交互式 ...