pat 甲级 团体天梯 L3-004. 肿瘤诊断
L3-004. 肿瘤诊断
在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环。给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积。
输入格式:
输入第一行给出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
输出格式:
在一行中输出肿瘤的总体积。
输入样例:
- 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
- 思路:上下前后左右六个方向搜索即可,用BFS好一些,dfs会爆
AC代码:
- #define _CRT_SECURE_NO_DEPRECATE
- #include<iostream>
- #include<cmath>
- #include<algorithm>
- #include<cstring>
- #include<vector>
- #include<string>
- #include<iomanip>
- #include<map>
- #include<stack>
- #include<set>
- #include<queue>
- using namespace std;
- #define N_MAX 1000+2
- #define INF 0x3f3f3f3f
- int N,M,L,T;//T为最小面积限制
- int Map[][][];
- bool vis[][][];
- int pos_z[] ={,,,,,-};
- int pos_x[] ={,,,-,,};
- int pos_y[] ={,-,,,,};
- int area;
- struct point {
- int x, y, z;
- point() {}
- point(int x,int y,int z):x(x),y(y),z(z) {}
- };
- void dfs(int x, int y, int z) {
- vis[z][x][y] = ;
- area++;
- for (int i = ; i < ; i++) {
- int Z = z+pos_z[i],X=x+pos_x[i],Y=y+pos_y[i];
- if (X >= && X <N && Y >= && Y < M && Z >= && Z < L && !vis[Z][X][Y]&&Map[Z][X][Y]==) {
- dfs(X, Y, Z);
- }
- }
- }
- void bfs(int x,int y,int z) {
- queue<point>que;
- que.push(point(x,y,z));
- vis[z][x][y] = true;
- while (!que.empty()) {
- point P = que.front();que.pop();
- area++;
- for (int i = ; i < ;i++) {
- int Z =P.z + pos_z[i], X = P.x + pos_x[i], Y = P.y + pos_y[i];
- if (X >= && X <N && Y >= && Y < M && Z >= && Z < L && !vis[Z][X][Y] && Map[Z][X][Y] == ) {
- vis[Z][X][Y] = true;
- que.push(point(X, Y, Z));
- }
- }
- }
- }
- int main() {
- while (scanf("%d%d%d%d", &N,&M,&L,&T) != EOF) {
- memset(vis,,sizeof(vis));
- for (int i = ; i < L;i++) {
- for (int j = ; j < N;j++) {
- for (int k = ; k < M;k++) {
- scanf("%d", &Map[i][j][k]);
- }
- }
- }
- int cnt = ;
- for (int i = ; i < L; i++) {
- for (int j = ; j < N; j++) {
- for (int k = ; k < M; k++) {
- area = ;
- if (!vis[i][j][k]&&Map[i][j][k]==) {
- bfs(j, k, i);
- if (area >= T) {
- cnt += area;
- }
- }
- }
- }
- }
- printf("%d\n",cnt);
- }
- return ;
- }
pat 甲级 团体天梯 L3-004. 肿瘤诊断的更多相关文章
- pat甲级 团体天梯赛 L2-022. 重排链表
L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...
- PAT天梯赛L3-004 肿瘤诊断
题目链接:点击打开链接 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是每 ...
- 团体程序设计天梯赛 L3-004. 肿瘤诊断
数组的大小不能开太大,否则会出现段错误 用bfs而不用dfs,dfs存储太多中间过程,会超内存 #include <stdio.h> #include <stdlib.h> # ...
- PAT天梯赛练习题——L3-004. 肿瘤诊断(三维连通块并查集)
L3-004. 肿瘤诊断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶 ...
- L3-004. 肿瘤诊断
L3-004. 肿瘤诊断 题目链接:https://www.patest.cn/contests/gplt/L3-004 BFS 之前尝试使用递归dfs,提交后发现有两个段错误,发现递归层数太多,然后 ...
- PAT甲级题解(慢慢刷中)
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6102219.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲级1131. Subway Map
PAT甲级1131. Subway Map 题意: 在大城市,地铁系统对访客总是看起来很复杂.给你一些感觉,下图显示了北京地铁的地图.现在你应该帮助人们掌握你的电脑技能!鉴于您的用户的起始位置,您的任 ...
- PAT甲级1127. ZigZagging on a Tree
PAT甲级1127. ZigZagging on a Tree 题意: 假设二叉树中的所有键都是不同的正整数.一个唯一的二叉树可以通过给定的一对后序和顺序遍历序列来确定.这是一个简单的标准程序,可以按 ...
- PAT甲级1123. Is It a Complete AVL Tree
PAT甲级1123. Is It a Complete AVL Tree 题意: 在AVL树中,任何节点的两个子树的高度最多有一个;如果在任何时候它们不同于一个,则重新平衡来恢复此属性.图1-4说明了 ...
随机推荐
- 洛谷P3371单源最短路径Dijkstra版(链式前向星处理)
首先讲解一下链式前向星是什么.简单的来说就是用一个数组(用结构体来表示多个量)来存一张图,每一条边的出结点的编号都指向这条边同一出结点的另一个编号(怎么这么的绕) 如下面的程序就是存链式前向星.(不用 ...
- 【线性基 集合hash】uoj#138. 【UER #3】开学前的涂鸦
还需要加强分析题目特殊性质,设计对应特殊算法,少想多写大力dfs剪枝不要管MLETLE直接上的能力 红包是一个有艺术细胞的男孩子. 红包由于NOI惨挂心情不好,暑假作业又多,于是他开始在作业本上涂鸦. ...
- 六、MySQL 删除数据库
MySQL 删除数据库 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限. 在删除数据库过 ...
- JZOJ 4743. 积木
Description Input Output Sample Input 38 7 63 9 41 10 5 Sample Output 18
- Federated引擎
Federated就像他的名字所说“联盟”,其作用就是把两个不同区域的数据库联系起来,以至可以访问在远程数据库的表中的数据,而不是本地的表. 1.进入mysql命令行,查看是否已安装Federated ...
- 662. Maximum Width of Binary Tree
https://leetcode.com/problems/maximum-width-of-binary-tree/description/ /** * Definition for a binar ...
- HOJ 13819 Height map
昨天校内比赛做了一个很有意思的题,体面如图: 题目大概意思是,给出一个俯视图矩阵,矩阵内元素表示当前位置有多少个方块,最后要求输出该立体图形中面的数量. 首先给出一组数据: 3 42 1 2 11 2 ...
- utf8和utf8mb4区别
原文链接 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编 ...
- (Winform)控件中添加GIF图片以及运用双缓冲使其不闪烁以及背景是gif时使控件(如panel)变透明
Image img = Image.FromFile(@"C:\Users\joeymary\Desktop\3.gif"); pictureBox1.Image =img.Clo ...
- 定时任务之crond服务
计划任务分为一次性计划任务与长期性计划任务 一次性计划任务:今天11:25执行重启网卡操作,执行结束 即任务消失 一次性计划任务格式: 创建:"at 时间" #默认采用的是交互式 ...