1091 Acute Stroke

news2025/4/27 18:21:36

One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the results of image analysis in which the core regions are identified in each MRI slice, your job is to calculate the volume of the stroke core.

Input Specification:

Each input file contains one test case. For each case, the first line contains 4 positive integers: M, N, L and T, where M and N are the sizes of each slice (i.e. pixels of a slice are in an M×N matrix, and the maximum resolution is 1286 by 128); L (≤60) is the number of slices of a brain; and T is the integer threshold (i.e. if the volume of a connected core is less than T, then that core must not be counted).

Then L slices are given. Each slice is represented by an M×N matrix of 0's and 1's, where 1 represents a pixel of stroke, and 0 means normal. Since the thickness of a slice is a constant, we only have to count the number of 1's to obtain the volume. However, there might be several separated core regions in a brain, and only those with their volumes no less than T are counted. Two pixels are connected and hence belong to the same region if they share a common side, as shown by Figure 1 where all the 6 red pixels are connected to the blue one.

Figure 1

Output Specification:

For each case, output in a line the total volume of the stroke core.

Sample Input:

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

Sample Output:

26

识别急性脑卒中的一个重要因素是卒中核心的体积。根据图像分析的结果,在每个MRI切片中识别核心区域,您的工作是计算中风核心的体积。

输入规范:每个输入文件包含一个测试用例。对于每种情况,第一行包含 4 个正整数:M、N、L 和 T,其中 M 和 N 是每个切片的大小(即切片的像素在 M×N 矩阵中,最大分辨率为 1286 x 128);L(≤60)是大脑切片的数量;T是整数阈值(即,如果连接核心的体积小于T,则不得计算该核心)。 然后给出L切片。每个切片由 0 和 1 的 M×N 矩阵表示,其中 1 表示笔触像素,0 表示正常。由于切片的厚度是一个常数,我们只需要计算 1 的数量即可获得体积。然而,大脑中可能有几个分离的核心区域,只有那些体积不小于T的区域才被计算在内。两个像素是连接的因此如果它们共享一个公共侧,则属于同一区域,如图 1 所示,其中所有 6 个红色像素都连接到蓝色像素。

输出规范:对于每种情况,在一行中输出中风核心的总体积。


题目核心和关键把握:

注意是中风核心体积,也就是不计入一个0(正常的核心)

同时不能直接遍历出现1的情况,因为我们是求区域的体积,而区域的定义就是他们处于同一个公共侧,只能是每个点的上下左右前后是1的数才能联通,非1就不属于,一直这样每个点按照上下左右前后延展下去。

不从0开始讨论和搜索到0时剪枝是因为到0是不符合题意的,因为我们要求的是中风核心体积。其实就是隐藏条件,所有连接核心都必须是1不能有0.如果存在了0还讨论什么?

直接全部作为一个整体,全部1都输出都可以了。

题目的图片就是这个意思,公共侧就是所有元素都必须满足条件即都为中风像素才能连接。而一旦出现0就立马分开,表示不与0为一个区域,于是就通过0划分了很多个区域,而这些区域就必须满足不小于t,小于的就不算了。

根据题目,像素之间是连接的,而6个像素连接一个像素明确了像素连接的方向也就是上下左右前后。因此只要一直不遇到0那么一直朝这几个方向连接他们都是一个公共侧,遇到0就封闭划边界,一直到结束,就划分了一个区域。

每一次的BFS,附近能联通的元素都联通了。

那么剩下的就只能是独立的不同区域,不会与前面一个区域的所有的像素有任何的相关性和连接。

因此没有必要担心前面先标记了元素的会影响后面区域的结果。

L其实就相当于高度,有多少层切片的意思。把所有切片叠在一起就是总体积(不是行程核心体积)

一个点就表示像素

计算入一个1就相当于获得了体积1

还有就是这个上下左右前后就意味着一定要把L看成高度,看成一个立体,上下的点计算公共侧的时候是要用到的,不能忽略!

因此,立体图形--三维数组;每一次都要检测上下左右前后,BFS

这题目感觉非常难读懂,最难的就在于审题,题目读懂了问题就很好解决了,

对于像这种类似的问题,一定要认真审题,不能理解错误,不然怎么解题都是错的

看起来审题好像不是回事,实际上等理解错题意,实现了错误的方法--这段代码就会前功尽弃,错误的理解做出错误的方法也只是做了无用功,这是很可惜的。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
int m, n, l, t;
int stroke[1300][130][65];
bool visited[1300][130][65] = { false };
int TX[6] = { 0,0,1,-1,0,0 };
int TY[6] = {1,-1,0,0,0,0 };
int TZ[6] = {0,0,0,0,1,-1};


struct node
{
	int x, y, z;
};

bool judge(int x,int y,int z)
{
	if (x < 0 || x >= m || y < 0 || y >= n || z < 0 || z >= l)
		return false;
	if (stroke[x][y][z] == 0 || visited[x][y][z])
		return false;

	return true;
}

int bfs(int i, int j, int k)
{
	visited[i][j][k] = true;
	int cnt = 1;//记录当前传入的点
	node pixel;
	pixel.x = i;
	pixel.y = j;
	pixel.z = k;
	queue<node>q;
	q.push(pixel);
	while (!q.empty())
	{
		pixel = q.front();
		q.pop();//忘了出队了难怪死循环
		for (int i = 0; i < 6; i++)
		{
			int tx = pixel.x+TX[i];
			int ty= pixel.y + TY[i];
			int tz = pixel.z + TZ[i];

			if (judge(tx, ty, tz))
			{
				cnt++;
				visited[tx][ty][tz] = true;
				q.push({ tx,ty,tz });
				//直接传三个参数也可以的,系统会自动给你一个新的node
			}



		}
	}

	return cnt >= t ? cnt : 0;
}
int main()
{
	
	long ans = 0;
	cin >> m >> n >> l >> t;
	
for (int k = 0; k < l; k++)
	for(int i=0;i<m;i++)
		for (int j = 0; j < n; j++)
		{
			scanf("%d", &stroke[i][j][k]);
		}

for (int k = 0; k < l; k++)
	for (int i = 0; i < m; i++)
		for (int j = 0; j < n; j++)//遍历所有的区域,满足条件的就加上
		{
			if (stroke[i][j][k] && !visited[i][j][k])
				ans += bfs(i, j, k);
		}

cout << ans;
	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++中的取余函数%、remainder、fmod以及matlab中的取余函数mod

C 1 整数取余 % 2 remainder函数 https://cplusplus.com/reference/cmath/remainder/?kwremainder double remainder (double numer , double denom); float remainder (float numer , float denom); long double remainder (long double numer, long double denom); doub…

一文带你了解MySQL之单表访问方法

前言 本文章收录在MySQL性能优化原理实战专栏&#xff0c;点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的&#xff1a;从根儿上理解MySQL》 对于我们这些MySQL的使用者来说&#xff0c;MySQL其实就是一个软件&#xff0c;平时用的最多的就是查询功…

Grow模型

Grow模型 该模型是约翰.惠特默&#xff0c;在1992年其著作《高绩效教练》一书中提出的&#xff0c;核心是围绕设定目标和寻找解决方案的有效工具。 模型介绍 GROW模型给到应用者一个可以高效的设立目标并制定计划&#xff0c;最终解决问题的思路框架。 GROW 由四个步骤构成&am…

老胡的周刊(第091期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 omnivore[2] 无干扰、注重隐私、免费开源专为…

【P26】JMeter WebSocket Sampler

文章目录 一、WebSocket Sampler 安装说明二、WebSocket Sampler 参数说明三、测试计划设计 一、WebSocket Sampler 安装说明 下载路径&#xff1a;https://jmeter-plugins.org/install/Install/ &#xff08;1&#xff09;、打开网页&#xff0c;点击 plugins-manager.jar 进…

​C++中虚函数 纯虚函数 虚基类的基础知识点​

一、前言 原文转载自 c中的 虚函数 纯虚函数 虚基类_名字全都被占用了的博客-CSDN博客&#xff0c;为了理解下C中虚函数 纯虚函数 虚基类的基础知识点。 二、虚函数 纯虚函数 虚基类三者区别 1.虚函数是用于多态中virtual修饰父类函数&#xff0c;确保父类指针调用子类对…

Maven基础学习---4、Maven的使用(IDEA)

1、创建父工程&#xff08;本人用的是IDEA2022.3&#xff09; 1、创建Project 2、配置Maven信息 如果没有提前设置过Setting for new project这个配置&#xff0c;那么每次创建Project后都需要设置Maven家目录位置&#xff0c;否则IDEA将使用内置的Maven核心程序&#xff08;…

数据仓库理论

数据仓库理论 基础理论数据仓库主要特征面相主题集成性非易失性、非易变性时变性 OLTP、OLAPOLTPOLAP对比 数据库与数据仓库的区别数据仓库、数据集市数据仓库分层架构分层思想和标准阿里巴巴数仓三层架构ODS层DW层DA层&#xff08;ADS层&#xff09; 分层的好处好处 ETL和ELT的…

mysql存储过程实例统计最大销售数量

1.需求 统计某天的销售的商品中&#xff0c;数量大于m的最大的销售数量。 传入参数&#xff1a;销售日期&#xff0c;销售数量 返回参数&#xff1a;最大销售数量 2.数据库表 销售表 CREATE TABLE t_sale ( id int NOT NULL COMMENT ‘主键’, good_id int NULL COMMENT ‘…

[山海关crypto 训练营 day17]

[HNCTF 2022 WEEK3]pnearq 题目代码和数据 from Crypto.Util.number import * from gmpy2 import next_prime from flag import flagp getPrime(1024) q next_prime(p) n p*q e 0x10001 c pow(bytes_to_long(flag), e, n) print(f"n {n}") print(f"c {…

chatgpt赋能Python-python8_9

Python 8-9: 了解更多关于Python的新特性 Python 作为一种高级编程语言已经被广泛应用于数据科学&#xff0c;Web开发&#xff0c;人工智能等领域。Python 8-9带来了新特色的更新和改进&#xff0c;这些功能使得Python更加强大和易于使用&#xff0c;吸引了越来越多开发者的关…

符尧最新研究:大语言模型玩砍价游戏?技巧水涨船高!

深度学习自然语言处理 原创作者&#xff1a;鸽鸽 若干年前&#xff0c;AlphaGo Zero用两个AI代理切磋围棋技艺&#xff0c;打败了人类。今早&#xff0c;符尧的一篇论文刷新了我的认知&#xff1a;让大语言模型相互对弈&#xff0c;再加一个评论家提供建设性意见&#xff0c;提…

自动控制原理备考-1题-传递函数

首先致敬西北工业大学自动控制原理的无冕之王张科老师。 期末考试&#xff0c;先下手为强&#xff0c;后下手遭殃。今天我们就开始一起针对期末考试有关题型一一梳理&#xff0c;突破解决。 给你一个系统结构图&#xff0c;让你求R&#xff08;s)和N(s)同时作用下的C(s)。基本…

机器学习项目实战-能源利用率 Part-5(模型解释)

博主前期相关的博客可见下&#xff1a; 机器学习项目实战-能源利用率 Part-1&#xff08;数据清洗&#xff09; 机器学习项目实战-能源利用率 Part-2&#xff08;探索性数据分析&#xff09; 机器学习项目实战-能源利用率 Part-3&#xff08;特征工程与特征筛选&#xff09; 机…

匿名通信 Windows 客户端的设计与实现

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本课题基于 U-TRI 匿名通信系统&#xff0c;设计一个 Windows 匿名通信客户端。该客户端在匿名通信系统中扮演了重要角色&#xff0c;实现了两个重要功能&#xff1a;第一&#xff0c;实现匿名通信协议&#xff0c;拦截/修改主…

TCP 三次握手与四次挥手

1 三次握手 三次握手的过程如下图&#xff1a; 一开始&#xff0c;客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口&#xff0c;处于 LISTEN 状态 客户端会随机初始化序号&#xff08;client_isn&#xff09;&#xff0c;将此序号置于 TCP 首部的「序号」字段中…

如何在 iPhone 上恢复已删除的应用程序数据

您是不小心删除了重要应用程序并且似乎无法在您的设备上找到它的 iPhone 用户吗&#xff1f;别担心&#xff0c;你并不孤单。在 iPhone 上丢失应用程序可能会令人沮丧&#xff0c;但幸运的是&#xff0c;有一些方法可以恢复它们。在本文中&#xff0c;我们将通过分步说明向您展…

你真的懂Java中的Cloneable接口和深拷贝么?

Cloneable接口 和 深拷贝 &#x1f490;文章导读 这篇文章就为大家讲讲什么是Cloneable接口&#xff0c;接口的用法以及什么是深拷贝和浅拷贝&#xff0c;如果有不足的地方&#xff0c;还望读者在评论区提出&#xff01;&#xff01;&#xff01; 上篇文章讲过用Comparable接口…

单模光纤的特征方程以及MATLAB求解

在之前的文章中&#xff0c;我们写出了单模光纤的特征方程以及对应的导波模式 这里我们在MATLAB中求解特征方程并表示出几个归一化参数的变化曲线 用到的公式是单模光纤导波模式的特征方程&#xff1a; clear close all tic Vmax 10; N 100;for j 1:NV(j) j/N*Vmax;Vtemp …

电脑微信占用100多GB空间 解决办法来了:重回清爽流畅

这几天微信吃内存的话题又上热搜了&#xff0c;作为一款10亿用户的国民级APP&#xff0c;微信的真是让人又爱又恨&#xff0c;不用几乎不可能&#xff0c;用起来槽点又多&#xff0c;光是磁盘占用就是个头疼的问题。 不论是工作还是日常沟通&#xff0c;微信里面的文件及语音、…