題意:
總時間限制: 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
#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了次。。