PKU暑期训练中 1.肿瘤检测

题意:
总时间限制: 1000ms 内存限制: 65536kB
描述
一张CT扫描的灰度图像可以用一个N*N(0 < N < 100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255。我们假设给定的图像中有且只有一个肿瘤。在图上监测肿瘤的方法如下:如果某个点对应的灰度值小于等于50,则这个点在肿瘤上,否则不在肿瘤上。我们把在肿瘤上的点的数目加起来,就得到了肿瘤在图上的面积。任何在肿瘤上的点,如果它是图像的边界或者它的上下左右四个相邻点中至少有一个是非肿瘤上的点,则该点称为肿瘤的边界点。肿瘤的边界点的个数称为肿瘤的周长。现在给定一个图像,要求计算其中的肿瘤的面积和周长。

输入
输入第一行包含一个正整数N(0 < N < 100),表示图像的大小;接下来N行,每行包含图像的一行。图像的一行用N个整数表示(所有整数大于等于0,小于等于255),两个整数之间用一个空格隔开。
输出
输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。
样例输入
6
99 99 99 99 99 99
99 99 99 50 99 99
99 99 49 49 50 51
99 50 20 25 52 99
40 50 99 99 99 99
99 99 99 99 99 99
样例输出
9 8

http://bailian.openjudge.cn/2016acmmid/a/

#include<iostream>
#include<cstdio>

using namespace std;
const int maxn = 100 + 10;
int ditu[maxn][maxn];

int main()
{
    int n;
    cin>>n;
    int ans = 0;
    int res = 0;
    for(int i = 0;i<n;i++)
    {
        for(int j= 0;j<n;j++)
        {
            cin>>ditu[i][j];
        }
    }
    for(int i =0;i<n;i++)
    {
        for(int j = 0;j<n;j++)
        {
             if(ditu[i][j]<=50)
            {
                ans++;
                if(i==0||j==0||i==n-1||j==n-1)
                {
                    res++;

                }else
                {
                    if((ditu[i][j+1]>50)||(ditu[i][j-1]>50)||(ditu[i-1][j]>50)||(ditu[i+1][j]>50))
                    {
                        res++;
                    }
                }
            }
        }
    }
    cout<<ans<<" "<<res<<endl;
}

水题。枚举遍地图就可以过了。。没看清楚题目WA了次。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章