PAT 1091

原创 2016年05月31日 09:59:49

1091. Acute Stroke (30)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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 by 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 by 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.

分析:题目太抽象了,开了很多遍,就是说脑袋里有切片,给了L个每个为m*n的矩阵,最大不超过1280*128,最高不超过60;

        然后关键之处是,如果某个点为1,则找出该店3维空间内所有是1的点,如果他们的总和大于T,则被录入;

一开始看见还以为是每一列大于T,就ok;这里借鉴了 此去经年 的代码,关键是三维空间的bfs;

#include <iostream>
#include <vector>
#include <algorithm>
#include <map> 
#include <queue>
#include <stdio.h>
using namespace std;
int m,n,l,t;
int total=0;
int matrix[1286][128][60];  
int xx[6] = {1,-1,0,0,0,0};  
int yy[6] = {0,0,1,-1,0,0};  
int zz[6] = {0,0,0,0,1,-1};  
struct node{  
    int x, y, z;  
    node(int _x, int _y, int _z){  
        x=_x; y=_y; z=_z;  
}  
};
void bfs(int x,int y,int z)
{
	queue<node> q;
	q.push(node(x,y,z));
	matrix[x][y][z]=0;
	int cnt=1;
	while(!q.empty())
	{
		node no=q.front();
		for(int i=0;i<6;i++)
		{
			int tx=no.x+xx[i];
			int ty=no.y+yy[i];
			int tz=no.z+zz[i];
			if((tx>=0&&tx<m)&&ty>=0&&ty<n&&tz>=0&&tz<l&&matrix[tx][ty][tz]==1)
				{
					cnt++;
					matrix[tx][ty][tz]=0;
					q.push(node(tx,ty,tz));
				}
				
			}
				q.pop();
	}	
	if(cnt>=t)
	total+=cnt;
}    

int main()
{
	
//	int **a=new int *[m];
//	for(int i=0;i<m;i++)
//	a[i]=new int[n];
//	for(int i=0;i<m;i++)
//		for(int j=0;j<n;j++)
//		cin>>a[i][j]; 
	cin>>m>>n>>l>>t;
	for(int i=0;i<l;i++)
	{   
			for(int kk=0;kk<m;kk++)
			{		
					for(int j=0;j<n;j++)
				{
					scanf("%d",&matrix[kk][j][i]);
				}
			}
	}
			
	for(int i=0;i<m;i++)
		for(int j=0;j<n;j++)
		 for(int w=0;w<l;w++)
			 if(matrix[i][j][w]==1)
					bfs(i,j,w);
		
	
	cout<<total<<endl;
	return 0;
} 


版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ1091 简单的欧几里得+简单的容斥

DescriptionZ城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。节目主持人会给该跳蚤发一张卡片。卡片上写有N+1个自...
  • NineFailure
  • NineFailure
  • 2016年08月28日 13:09
  • 397

POJ1091 跳蚤 素因子分解+容斥原理

题目链接:http://poj.org/problem?id=1091 分析:我们假设卡片上的标号分别是a1,a2,...,an,M,跳蚤跳对应标号的卡片的次数分别为x1,x2,...,xn...
  • AC_Gibson
  • AC_Gibson
  • 2015年06月17日 10:38
  • 1328

PAT乙级解题报告目录

源码地址:https://github.com/liuchuo/PAT 乙级 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题 1002. 写出这个数...
  • liuchuo
  • liuchuo
  • 2016年07月24日 17:48
  • 2121

PAT要注意的地方

PAT即是浙大OJ(OnlineJudge),网址是http://www.patest.cn/contests/pat-a-practise(因为分为普通级别,Advanced级别和top级别),链接...
  • Apie_CZX
  • Apie_CZX
  • 2015年04月22日 21:12
  • 2467

用PhotoShop制作.pat格式的图片

在网上看到了一篇教程,但是很不清晰,看不清楚。于是自己再写一遍。 第一步,准备好你要转pat格式的图片,放入Ps中: 第二步,点击菜单栏中的“编辑”按钮,在出现的下拉列表中找到“定义图案”,点...
  • u014581901
  • u014581901
  • 2016年07月20日 12:19
  • 3266

PAT:注意事项

1. include相应的头文件PAT是基于IDE的,所以要提交能在IDE上正确运行的程序。必须include相应的头文件,如#include #include #include #include ...
  • jinzhao1993
  • jinzhao1993
  • 2016年04月04日 00:25
  • 511

PAT甲级题解目录

github源码地址:https://www.github.com/liuchuo/PAT ID Title C/C++(附分析) 备注 1001 A+...
  • liuchuo
  • liuchuo
  • 2016年09月10日 22:19
  • 5435

PAT乙级—1025. 反转链表 (25)-native

给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后...
  • wanmeiwushang
  • wanmeiwushang
  • 2016年06月10日 22:18
  • 1069

PAT程序设计练习——甲级1002(两个多项式的解析与合并)

PAT程序设计能力测试 题目原文链接:点击打开链接 翻译题目要求: 程序输入为两行:均为一个多项式,按 K N1 An1 N2 An2 ......Nk Ank,K代表的是多项式的非零项数,范围闭区...
  • xexiyong
  • xexiyong
  • 2015年12月14日 13:18
  • 1084

PAT乙级1064 朋友数

1064. 朋友数(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程...
  • sinat_37273780
  • sinat_37273780
  • 2017年02月22日 15:59
  • 312
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PAT 1091
举报原因:
原因补充:

(最多只允许输入30个字)