1091 Acute Stroke (PAT甲级)

news2024/11/24 21:05:22

这道题用dfs做的话,因为递归太多层,堆栈溢出,有两个测试点过不了;所以用bfs。

但令我百思不得其解的是,我没用方向变量x[6], y[6], z[6],直接老老实实算每一个方向的话,最后一个测试点过不了;但理论上来说,实现的本质应该是完全一样的。如有大神看到,望不吝赐教。

无法全部通过的写法;这里的i, j, k即AC代码中的curri, currj, currk:

        if(i + 1 < L && vec[i + 1][j][k] == 1){
            vec[i + 1][j][k] = 0;
            curr.push_back(node(i + 1, j, k));
        }
        if(i - 1 >= 0 && vec[i - 1][j][k] == 1){
            vec[i - 1][j][k] = 0;
            curr.push_back(node(i - 1, j, k));
        }
        if(j + 1 < M && vec[i][j + 1][k] == 1){
            vec[i][j + 1][k] = 0;
            curr.push_back(node(i, j + 1, k));
        }
        if(j - 1 >= 0 && vec[i][j - 1][k] == 1){
            vec[i][j - 1][k] = 0;
            curr.push_back(node(i, j - 1, k));
        }
        if(k + 1 >= 0 && vec[i][j][k + 1] == 1){
            vec[i][j][k + 1] = 0;
            curr.push_back(node(i, j, k + 1));
        }
        if(k - 1 >= 0 && vec[i][j][k - 1] == 1){
            vec[i][j][k - 1] = 0;
            curr.push_back(node(i, j, k - 1));
        }

AC的代码:

#include <cstdio>
#include <vector>

struct node{
    int height;
    int width;
    int length;
    node(int _height, int _width, int _length): height(_height), width(_width), length(_length){}
};

int M, N, L, T, area, ans;
int x[6] = {1, -1, 0, 0, 0, 0};
int y[6] = {0, 0, 1, -1, 0, 0};
int z[6] = {0, 0, 0, 0, 1, -1};
std::vector<std::vector<std::vector<int>>> vec;

void bfs(int a, int b, int c){
    std::vector<node> curr;
    int pivot = 0;
    int curri, currj, currk, tmpi, tmpj, tmpk;
    vec[a][b][c] = 0;
    curr.push_back(node(a, b, c));
    while(pivot != curr.size()){
        curri = curr[pivot].height;
        currj = curr[pivot].width;
        currk = curr[pivot].length;
        for(int i = 0; i < 6; ++i){
            tmpi = curri + x[i];
            tmpj = currj + y[i];
            tmpk = currk + z[i];
            if(tmpi < 0 || tmpi >= L || tmpj < 0 || tmpj >= M || tmpk < 0 || tmpk >= N || vec[tmpi][tmpj][tmpk] == 0){
                continue;
            }
            vec[tmpi][tmpj][tmpk] = 0;
            curr.push_back(node(tmpi, tmpj, tmpk));
        }
        ++pivot;
    }
    area = curr.size();
}

int main(){
    scanf("%d %d %d %d", &M, &N, &L, &T);
    std::vector<int> line(N, 0);
    std::vector<std::vector<int>> plane(M, line);
    vec.resize(L, plane);
    for(int i = 0; i < L; ++i){
        for(int j = 0; j < M; ++j){
            for(int k = 0; k < N; ++k){
                scanf("%d", &vec[i][j][k]);
            }
        }
    }
    ans = 0;
    for(int i = 0; i < L; ++i){
        for(int j = 0; j < M; ++j){
            for(int k = 0; k < N; ++k){
                if(vec[i][j][k] == 1){
                    bfs(i, j, k);
                    if(area >= T){
                        ans += area;
                    }
                }
            }
        }
    }
    printf("%d", ans);
    return 0;
}

题目如下:

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, Land 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

 

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

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

相关文章

17.6:迪瑞克斯啦算法

迪瑞克斯啦算法 这个算法研究的是&#xff1a;有向的&#xff0c;没有负权重&#xff0c;可以有环的图。 这个算法主要研究的是&#xff1a;给出的节点到这张图的其他节点的最短路径是多少。用一个表表示出来。 思路&#xff1a; 如下图所示&#xff0c;我们想要求出a节点到其…

建立时间、保持时间和亚稳态

目录 一、建立时间和保持时间 二、亚稳态 三、避免亚稳态策略 四、多级寄存器阻断亚稳态传播 一、建立时间和保持时间 如图1所示&#xff0c;建立时间&#xff08;set up time&#xff09;是指在触发器的时钟信号上升沿到来以前&#xff0c;数据稳定不变的时间&#xff0c;…

【Apache Pinot】探究 Pinot 中存储模型的设计逻辑和 Segment 详解

背景 上一篇文章中&#xff0c;笔者简单介绍了一下分布式数据库 Pinot 的核心组件&#xff0c;本文主要针对其中的存储模型会做部分讲解。 如果你对读写磁盘有不错的基础的话&#xff0c;看起来会更轻松一些&#xff0c;如果没有也没关系&#xff0c;我会简单讲解一下这么设计…

使用STM32进行串口实验(非中断+中断)

关于串口相关的基本知识可以看这篇文章https://blog.csdn.net/weixin_62599865/article/details/129963991?spm1001.2014.3001.5501 一.使用非中断的方式进行串口通信 串口发送/接收函数&#xff1a; HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制 HAL_…

2023最新版本Activiti7系列-Activiti7概述和入门案例

一、Activiti7概述 官网地址&#xff1a;https://www.activiti.org/ Activiti由Alfresco软件开发&#xff0c;目前最高版本Activiti 7。是BPMN的一个基于java的软件实现&#xff0c;不过Activiti 不仅仅包括BPMN&#xff0c;还有DMN决策表和CMMN Case管理引擎&#xff0c;并且有…

【前端 - HTML】第 1 课 - HTML 初体验

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 。 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、HTML 概念 2.1、HTML 定义 2.2、标签语法 3、HTML 基本骨架 4、标签的关系 5、注释 6、总结 1、缘起 最近在学习微信小程…

Apache Doris 冷热分层技术如何实现存储成本降低 70%?

在数据分析的实际场景中&#xff0c;冷热数据往往面临着不同的查询频次及响应速度要求。例如在电商订单场景中&#xff0c;用户经常访问近 6 个月的订单&#xff0c;时间较久远的订单访问次数非常少&#xff1b;在行为分析场景中&#xff0c;需支持近期流量数据的高频查询且时效…

C++ 使用一维数组和二维数组给 std::vector<cv::Point2d> 赋值的方法

文章目录 1. 一维数组给 vector 赋值的方法2. 一维 Point2d 数组给 vector<cv::Point2d> 赋值3. 二维 double 数组给 vector<cv::Point2d> 赋值 1. 一维数组给 vector 赋值的方法 &#xff08;1&#xff09;最简单的赋值方法是for循环遍历赋值&#xff0c;此处略过…

Python展开嵌套列表的五种方法

一、问题的提出 微信群中有人问&#xff0c;如何把以下内容转换成一个列表&#xff1a; 转换后&#xff1a; "[["007674","工银产业升级股票A","GYCYSJGPA","1.3574"],["007675","工银产业升级股票C",&qu…

d2l学习_第二章预备知识

x.1 Data Manipulation 数据操作。在Pytorch中常用的数据操作如下&#xff1a; 对于张量&#xff0c;即torch.Tensor类型的数据&#xff0c;你的任何操作都要把他想象成一个指针&#xff0c;因为等于运算符ab&#xff0c;会将b的张量内存地址赋值给a。 torch.Tensor类型的基…

day02-JavaScript-Vue

1 JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 1.5.1.3 JSON对象 自定义对象 在 JavaScript 中自…

linux(信号发送后)

目录&#xff1a; 1.引入什么是合适的时候 2.内核态和用户态 3.信号的处理 4.sigaction函数 -------------------------------------------------------------------------------------------------------------------------------- 1.引入什么是合适的时候 2.信号什么时候被处…

你真的会PPT配色吗?来看看这篇吧,瞬间让你的PPT高大上起来

本文档使用技巧如下截图 在色彩里使用其它填充颜色 选取这个“吸管” 用于吸别人的颜色 我曾经为了出一个“惊艳”的PPT,光吸管用了不下150次。 好的艺术家复制,伟大的艺术家偷窃!--毕加索 下面就给出几大常用配色 各位在使用时注意看这些“色卡”的规律,那就是反差色…

安卓系统浏览器开发

预置某个浏览器为系统默认的浏览器 描述: 当系统存在多个浏览器时&#xff0c;如何预置某个浏览器为系统默认的浏览器&#xff1f; 方法: 1.在PackageManagerService.java中的构造函数结尾添加&#xff1a;setDefaultBrowser(); 2.setDefaultBrowser()的具体实现&#xff…

TDengine 合作伙伴 +1,这次是「DaoCloud道客」

随着我国数字经济持续快速发展&#xff0c;各行各业都在积极拥抱云技术&#xff0c;上云成为企业加快数字化转型步伐的关键一步。在此过程中&#xff0c;越来越多的企业开始意识到云原生技术的重要性&#xff0c;利用云原生更快地开发和部署应用程序&#xff0c;提高应用程序的…

智慧信访大数据挖掘平台解决方案

TipDM数据挖掘建模平台由泰迪自主研发&#xff0c;面向大数据挖掘项目的工具。平台使用JAVA语言开发&#xff0c;采用B/S结构&#xff0c;用户不需要下载客户端&#xff0c;可通过浏览器进行访问。平台提供了基于Python、R以及Hadoop/Spark分布式引擎的大数据分析功能。平台支持…

人民大学加拿大女王大学金融硕士——为什么这么多人选金融行业呢

又是一年毕业季&#xff0c;越来越多的新人涌入职场&#xff0c;金融行业依然是择业人们的香饽饽。为什么大家会选金融行业呢&#xff1f;金融行业是一个充满挑战但也充满魅力的行业。在这个快节奏的行业中&#xff0c;人们不断地面对着机遇和挑战&#xff0c;而这个行业也为那…

TLD5097EL-ASEMI代理英飞LED驱动TLD5097EL

编辑&#xff1a;ll TLD5097EL-ASEMI代理英飞LED驱动TLD5097EL 型号&#xff1a;TLD5097EL 品牌&#xff1a;Infineon(英飞凌) 封装&#xff1a;SSOP-14-EP-150mil 类型&#xff1a;LED驱动、汽车芯片 TLD5097EL特性 输入电压范围宽&#xff0c;从4.5 V到45 V 极低关断…

【FATE联邦学习】FATE 自定义Trainer

背景 自己定义了模型后&#xff0c;需要自行定义训练方式。 这里文档给了方法&#xff0c;但是大部分还是需要自己看源码摸索。 https://fate.readthedocs.io/en/latest/tutorial/pipeline/nn_tutorial/Homo-NN-Customize-Trainer/https://fate.readthedocs.io/en/latest/tu…

如何按需下载和安装Win10补丁

如何按需下载和安装Win10补丁 一般我们都是通过系统自带的Windows更新来直接安装补丁&#xff0c;这种方式虽然方便&#xff0c;但是耗时久&#xff0c;而且更新体量也大&#xff0c;会占用很多空间&#xff0c;其实我们完全可以按需下载和安装&#xff0c;下面就给大家介绍方法…